Объявление 2D массивов для строк против целых чисел в C?
Почему при объявлении 2D-массива для строк мне нужно использовать '*'
char *month[12][10] = {"January", "February", "March", "April",
"May", "June", "July", "August",
"September", "October", "November",
"December"};
но когда я объявляю это для целых чисел, нет необходимости?
int numbers[2][3]={1,2,3,4,5,6};
1 ответ
Причина в C "строки" представлены или обработаны указателями на его первый символ вместо этого.
Или, говоря по-другому - в языке C нет строкового типа, есть только указатели на символы. По соглашению многие библиотеки рассматривают указатель на символ как начало "строки", оканчивающейся на 0x00
байт или принять "строковую" длину в качестве параметра, но нет строкового типа.
когда я объявляю это для целых чисел, нет необходимости?
Потому что целые числа представлены сами по себе, а не по их первому байтовому адресу. Когда вы используете "что-то в нотации в кавычках", это фактически дает указатель на его первый символ, а указатель на символ отмечается как char *ptr
в С.
Когда ты видишь:
char *str = "some string";
это означает переменную str
получает адрес персонажа s
, И переменная str
объявляется для указания на символ, так что это char *
, Это лишь соглашение некоторых библиотек, что с использованием первой буквы символа вы имеете дело со строкой, с которой она начинается.