инициализация из несовместимого типа указателя во время инициализации массива - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть код ниже:

int main()
{
    int* abc[] ={
                    [3] = (&(int[3]){1,2,3}),
                    [2] = (&(int[2]){4,5})
                };
    printf("\n abc[3][1] = %d \n",abc[3][1]);
    return 0;
}

Я пытаюсь настроить мой массив abc, чтобы конкретные индексы массива указывали на другой массив целых чисел.

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

Код работает нормально, но я получаю предупреждение:

warning: initialization from incompatible pointer type

Это потому, что мой массив abc объявлен целочисленным, но на самом деле он указывает на массив целых чисел? Как я могу убрать это предупреждение?

1 Ответ

0 голосов
/ 05 ноября 2018

Типы, которые вы используете в составных литералах, неверны.

Элементами массива являются int *, но при использовании & типы составных литералов: int (*)[3] и int (*)[2].

Должно быть:

int* abc[] ={
                [3] = ((int[3]){1,2,3}),
                [2] = ((int[2]){4,5})
            };

Теперь int[3] и int[2] оба распадаются до int *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...