У нас есть следующий фрагмент кода:
char tab[2][3] = {'1', '2', '\0', '3', '4', '\0'};
printf("%s\n", tab);
И я не понимаю, почему мы не получаем ошибку/предупреждение при вызове Я получаю предупреждение, но не ошибку, и программа работает нормально. Он печатает 'printf
.12
'.printf
ожидает аргумент типа char *
, то есть указатель на char
. Итак, если бы я объявил char arr[3]
, то arr
— это адрес блока памяти, который содержит char
, поэтому, если бы я вызвал printf
с ним, он распался бы на указатель на char, то есть char *
.
Аналогично, tab
— это адрес блока памяти, который содержит тип массив из 3 символов, который, в свою очередь, адрес блока памяти содержит char
, поэтому tab
будет распадаться на char **
, и это должно быть проблема, так как printf
ожидает char *
.
Может ли кто-нибудь объяснить эту проблему?
Приложение:
Я получаю следующее предупреждение:a.c:6: warning: char format, different type arg (arg 2)