О 2d массиве символьных указателей - PullRequest
0 голосов
/ 13 декабря 2010

Я нашел следующую декларацию в моей Книге c, может кто-нибудь объяснить это:

    char *dic[][40]={
"atlas", "A volume of maps",
"car", "a vehicle",
"telephone", "a communication device",
"", ""
    }

Вот что означает 40, т. Е. Какое это измерение?

Ответы [ 4 ]

3 голосов
/ 13 декабря 2010

На самом деле это довольно странный способ инициализации словаря.

Это двумерный массив из char* (строки с нулем в конце (\0)).

Размерыявляются [строки] [столбцы].

Таким образом, у вас есть 1 строка (определенная инициализатором) и 40 столбцов строк,

, где 8 из них инициализированы.ПРИМЕЧАНИЕ. Вы уверены, что это не char dic[][40] (т. Е. Список строк максимальной длины 40)?

1 голос
/ 13 декабря 2010

dic - это двумерный массив char*;его размеры составляют 1 x 40.

40 указывается в деклараторе, а 1 подразумевается тем, что в инициализаторе есть только один массив.Полный инициализатор будет иметь другой набор фигурных скобок, например,

char *dic[][40] =
{
    {
        "atlas",     "A volume of maps",
        "car",       "a vehicle",
        "telephone", "a communication device",
         "",         ""
    }
};

. С дополнительными фигурными скобками становится понятнее, что неявное измерение равно 1.

Каждый элемент в двумерном массивеуказатель типа char*.Первые восемь указателей инициализируются так, чтобы указывать на восемь строковых литералов, заданных в инициализаторе.

0 голосов
/ 13 декабря 2010

40 в вашем коде означает, что максимальная длина символов (или общая длина строки) равна 40.

Думайте char *dic[][40] как массив указателей.При этом один указатель указывает максимум на 40 символов.

0 голосов
/ 13 декабря 2010

Я думаю, что в книге могут быть ошибки, кажется, что они хотели словарь - массив 3D:


 char *dic[][40]={
            {"atlas", "A volume of maps"},
            {"car", "a vehicle"},
            {"telephone", "a communication device"},
            {"", ""}
        };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...