Ошибка "слишком много скобок вокруг скалярного инициализатора" при использовании 2d массива в C - PullRequest
0 голосов
/ 05 марта 2019

Я все еще изучаю C, но когда я пытаюсь использовать 2d массив, я получаю ошибки:

/Users/harry/Dropbox/C/Practise/test_1/main.c:157:9: error: expected expression
int[,] numberGrid = {  
   ^   
/Users/harry/Dropbox/C/Practise/test_1/main.c:158:9: warning: too many braces  
around scalar initializer [-Wmany-braces-around-scalar-init]  
    {1, 2, 3 },

Мой код:

int main() {
    int[,] numberGrid = {
        {1, 2, 3 },
        {4, 5, 6 },
        {7, 8, 9 }
    };

    printf("%d\n", numberGrid[1, 1]);
}

1 Ответ

0 голосов
/ 05 марта 2019

Как отмечено в комментариях, нотация int[,] numberGrid = { … просто не является C.

Если вы написали либо:

int numberGrid[3][3] = {
    {1, 2, 3 },
    {4, 5, 6 },
    {7, 8, 9 }
};

, либо:

int numberGrid[][3] = {
    {1, 2, 3 },
    {4, 5, 6 },
    {7, 8, 9 }
};

вы сможете получить инициализатор массива для компиляции.

Затем вам нужно исправить printf(), чтобы напечатать элемент массива.Запятая не используется в подписках на C (для большинства практических целей она никогда не появляется в нижнем индексе - вы можете придумывать исключения, если стараетесь достаточно усердно, но вы не должны писать такой код нормально).

Вы можете написать:

printf("%d\n", numberGrid[1][1]);

для печати 5.Как написано (printf("%d\n", numberGrid[1,1]);), вы печатаете адрес в виде десятичного целого числа со знаком, которое не гарантированно работает хорошо (усечение данных на 64-разрядной машине и т. Д.).

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