Работал над назначением, которое требует создания и обхода двумерного массива целых чисел, но без использования обозначения массива, такого как [1] [2] или даже ( (a + i) + j),Требуется использовать арифметику указателей для доступа к каждому отдельному элементу.
До сих пор мой подход состоял в том, чтобы выделить его как таковой.Включены комментарии, которые показывают, что я думаю должен выполнить мой код, не стесняйтесь исправлять меня иначе.
int **a; // 2d array, or pointer to array of pointers
row = 5;
count = 5;
// allocate space
a = new int* [row]; // create array of pointers
int *p = *m; // point to first array
for (int r = 0; r < row; r++)
{
a = new int [col]; // create space within each array
a++;
}
Строка и столбцы являются динамическими и передаются в качестве параметров вфункция.В качестве примера здесь используется только 5.
Чтобы заполнить массив 5 x 5 2d элементами (пример 5), я использую следующее:
int *pRow = *a; // get array of pointers
int *pElement = &pRow[0]; // get first element from the first array
int r = 0;
int c = 0;
while (r < row)
{
while (c < col)
{
int element = 5;
*pElement = element; // set first element to 5
pElement++; // go to next element
c++;
}
c = 0;
r++;
}
Проблема в том, что * pElement= element выдает ошибку EXC_BAD_ACCESS, поэтому я что-то не так делаю.
Может ли кто-нибудь указать на мою ошибку или исправить мое понимание указателей, если он найден нужным?
-
Также, как примечание стороны, правильно лискажем,
int *pRow = *a;
int *pElement = &pRow[0];
обращается к тому же предмету (который является первым элементом) как
int *pElement = &**a[0];