все. У меня есть интересный вопрос, заданный мне моим профессором C++. По-видимому, он также используется в некоторых интервью с заданиями на программирование.C++: сделать одну точку матрицы другой
Прошлая ситуация. У меня есть двумерный массив (матрицу) ИНТ-х:
int array1[][2] = {{11, 12}, {21, 22}};
Я хотел бы создать второй двумерный массив, array2, что указывает на первом массиве. То есть, они будут занимать одно и то же пространство в памяти.
Очевидным решением является использование указателей. Итак, я объявил array2 следующим образом:
int (*array2)[2][2];
array2 = &array1;
Это, кажется, работает. Теперь, вот улов. Я пытаюсь вычесть 11 из array1, но делаю это, ссылаясь на массив2. Вот код для того, что я пытаюсь выполнить:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
// Trying to do the equivalent of this:
array1[i][j] -= 11;
}
}
Я попытался следующие в теле внутренней для цикла, все без успеха:
// Second row not affected
*(array2[i][j]) -= 11;
// Second row not affected
*(*(array2[i]) + j) -= 11;
// incompatible types in assignment of `int' to `int[2]'
*(*(array2 + i) + j) -= 11;
Любые идеи? Я подозреваю, что есть что-то простое, что я просто не добираюсь сюда.
Спасибо!
Проблема со вторым решением заключается в том, что я не могу передать массив2 функции вместо array1. Кроме того, я еще не видел первый синтаксис, используемый при объявлении массива; Я даже не знал, что смогу это сделать. –
@Karl, проходящий к функции, идентичен: 'f (int a [] [2], int size)' будет принимать 'array1' и любую версию' array2' – Cubbi
Извините, вы правы. То, как я его первоначально настраивал, вы должны разыменовать массив, когда вы его передаете: f (* array2, 2). Если вы используете какое-либо из ваших решений, вы этого не сделаете. Вот где я получал ошибки. –