Если я правильно понял ваше намерение, вы хотели, чтобы эти вложенные последовательности {31, 28, ... }
служили в виде char[]
массивов, на которые указывали бы указатели в массиве верхнего уровня.
Несмотря на то, что говорится в другом ответе (ответах), неверно говорить, что вам обязательно нужен литеральный 2D-массив (хотя в этом случае 2D-массив может быть лучшей идеей, чем то, что вы пытались сделать). Исходная попытка тоже будет работать, если вы используете правильный синтаксис.
Теперь вы не можете просто установить последовательность {31, 28, ... }
в середине кода и ожидать, что компилятор будет интерпретировать его как массив. Язык не имеет такой функции, но имеет аналогичный язык с немного отличающимся синтаксисом. Единственный способ добиться правильной инициализации вашего массива char *dayTab[]
в том, что «встроенный» способ состоит в использовании функции соединения буква. Инициализация будет выглядеть следующим образом
char *dayTab[] = {
(char []) { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
(char []) { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
};
Примечания дополнительного (char [])
синтаксиса. Это абсолютно необходимо. Это единственное, что вы должны изменить в своем исходном коде, чтобы он скомпилировался по назначению.
То, что вы в настоящее время имеете в своем исходном коде, недействительно C. Если какой-то компилятор принял этот код (GCC в CodeBlocks?), То только из-за некоторого расширения компилятора. В этом конкретном случае это расширение компилятора сыграло с вами жестокую шутку. Я даже не знаю, как это интерпретировалось компилятором, но определенно не так, как вы предполагали, что это будет интерпретироваться.
P.S. В моих экспериментах GCC предоставил стену диагностических сообщений в ответ на наш оригинальный код. Получали ли вы эти сообщения от своего компилятора? Вы просто проигнорировали их?
Компилятор не знает размеры 'char * arr []' внутри функции 'findAndPrint'. Либо передайте его как 'char arr [] [12]' (или как 'char [2] [12]', если вы действительно этого хотите), или просто объявите его внутри функции, поскольку он кажется логически правильным местом для него , Кроме того, объявите его 'static', если вы намереваетесь вызывать его более одного раза, чтобы избежать инициализации при каждом вызове. –
'void findAndPrint (char arr [] [12], int year, int month, int day);', 'char dayTab [] [12] = {' – BLUEPIXY
Вам действительно нужно заботиться о предупреждениях, выпущенных компилятором. Они не предназначены для развлечения ... – alk