C многомерных массивов, несовместимые присваивания - PullRequest
2 голосов
/ 25 октября 2011

Очень специфическая проблема, возможно, из-за моего общего плохого понимания многомерных массивов в C. У меня есть этот код:

int io_pipes[NUM_IO_PROC][n][2][2];

for (int i = 0; i < n; ++i) {
    int pipes[NUM_IO_PROC][2][2];
    for (int j = 0; j < NUM_IO_PROC; ++j) pipes[j] = io_pipes[j][i];
}

Конечно, чего-то не хватает (например, что происходит с pipes переменная).Проблема в том, что в строке 5 я получаю сообщение об ошибке «несовместимый тип в назначении».Я бы хотел, чтобы компилятор дал мне больше информации, потому что, насколько я знаю, pipes[j] и io_pipes[j][i] имеют тип int[2][2].

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Вы не можете «назначать» массивы. (По крайней мере, то, что я думаю вы пытаетесь сделать.)

Вам нужно будет скопировать каждый элемент, один за другим. Может быть, вы можете использовать одну из существующих библиотечных функций для этой задачи?

for(int j = 0; j < NUM_IO_PROC; ++j)
    memcpy(&pipes[j], &io_pipes[j][i], sizeof pipes[j]);
0 голосов
/ 25 октября 2011

Идентификатор массива внутренне представлен как указатель на базовый адрес, но в отличие от указателей им не может быть присвоено новое значение адреса, которое вы пытаетесь сделать в pipes[j] = io_pipes[j][i];

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