2013-12-10 3 views
1

Я написал программу, которая делает 2d-массив, а затем устанавливает его номера. Второго шаг, который у меня есть проблема в нем, что, когда я хочу, чтобы переместить строки и столбцы, я сталкиваюсь с проблемой в этой линии nmatrix[i*c+j] = 0;Как назначить два массива 2d

ошибка заключается в следующем: error: incompatible types in assignment of 'int' to 'int [(((sizetype)(((ssizetype)(c + shiftc)) + -1)) + 1)]'

здесь код:

void shiftMatrix(int *matrix, int r,int c ,int shiftr,int shiftc){ 
int nmatrix [r+shiftr][c+shiftc]; 
for(int i = 0; i< shiftr; i++) 
{ 
    for(int j = 0; j<shiftc;j++) 
    { 
     nmatrix[i*c+j] = 0; 
    } 
} 
for(int i = shiftr; i< r; i++) 
{ 
    for(int j = shiftc; j<c;j++) 
    { 
     nmatrix[i*c+j] = matrix[i*c+j]; 
    } 
} 
} 

Любая помощь пожалуйста ?? Заранее спасибо

+0

Возможный дубликат http://stackoverflow.com/q/936687/356440 –

+0

Вы хотите сдвинуть строки и столбцы, или будет достаточно сдвинуть только строки? (это очень важно для выбора решения) – anatolyg

+0

Я хочу, чтобы их можно было сдвинуть –

ответ

1
int nmatrix [r+shiftr][c+shiftc]; 

Прежде всего, вы используете массив с непостоянными границами, что является controversial особенности.

Кроме того, здесь вы объявляете двумерный массив nmatrix, но ваша другая матрица (matrix) является указателем на int (или одномерный массив, если вам нравится смотреть на это таким образом). Это рецепт путаницы.

Вы можете легко объявить nmatrix ("новую матрицу"?), Как одномерный массив:

int nmatrix[(r+shiftr) * (c+shiftc)]; 

Или (предположительно лучше)

std::vector<int> nmatrix((r+shiftr) * (c+shiftc)); 

Затем код nmatrix[i*c+j] = 0 будет работать (однако, вы должны изменить c на c+shiftc всякий раз, когда вы работаете с nmatrix).

1

Вы не можете определить массив динамически, как вы это делаете. Вы должны использовать C++ ключевого слова new:

int nmatrix[][] = new int [r+shiftr][c+shiftc]; 

Вы не можете определить массивы так, как вы делали, с не постоянным значением INT для измерения, поскольку такие статические массивы должны быть определены для памяти на этапе компиляции , Таким образом, размеры должны быть const-выражением.

Наоборот, с ключевым словом new вы можете определять размеры массивов на этапе выполнения, поскольку это динамическое распределение.

В этом вопросе SO есть более подробные ответы here.

+0

Это не работает, к сожалению. Таким образом, я создал 2d массивы. –

+0

Что вы подразумеваете под словом «это не работает»? Сообщение об ошибке ? –

+0

первая ошибка: ошибка: объявление «nmatrix» как многомерного массива должно иметь границы для всех измерений, кроме первого | –

Смежные вопросы