Объявление 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 *, Это лишь соглашение некоторых библиотек, что с использованием первой буквы символа вы имеете дело со строкой, с которой она начинается.

Другие вопросы по тегам