2011-12-17 6 views
1

Я переношу некоторый код на C++ в ActionScript 3, и у меня был небольшой вопрос, о котором я смущен.Указатель на C++ 2D Array

В одной функции один из параметров: int* myPtr. myPtr - это адрес элемента 2D-массива, &my2DArray[x][y]. x и y также являются параметрами функции. Я немного немного смущен тем, к чему обращаются, когда код обращается, например, myPtr[1]. Я думаю, что это будет следующий элемент в my2dArray, но я не уверен, что это будет my2DArray[x+1][y] или my2DArray[x][y+1]. Спасибо за любую помощь.

Дополнительная информация: my2DArray создана:

//initPtr is a int*, auxPtr is a int*, as is temp1 
initPtr = (unsigned int *)NewPtr(
     sizeof(unsigned int) * 
     X * Y); 
    } 

    auxPtr = initPtr ; 

    for (i = 0; i < X; i++) { 
    temp1 = auxPtr + i * Y; 
    my2DArray[i] = (short *)temp1; 
    } 

unsigned char* NewPtr(
    int size) 
{ 
    return ((unsigned char*)calloc(size, sizeof(unsigned char))); 
} 
+0

Будьте осторожны: initPtr выделяется как массив неподписанных целых чисел, но к нему обращаются как шорты через my2DArray. –

ответ

0

Было бы my2DArray[x][y+1]. C++ использует строковый порядок для индексов многомерных массивов. Это означает, что большие переходы в памяти - это изменения в самом левом индексе, а переходы отдельных элементов - в самый правый индекс.

0

Если myPtr действительно является указателем на произвольную ячейку в массиве, то, если вы не знаете макет 2D-массива, вы не можете точно. Вероятно, это следующий в строке (предполагая стандартный 2D-массив C++, но он может быть ниже строки (если он был в конце строки). Или, если массив реализован как 1D массив из 1D массивов , тогда это может быть даже не юридический адрес (были ли они в конце строки).

+0

Я добавил как он создается. – user1103976

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