вопрос о массиве указателей в C ++ - PullRequest
0 голосов
/ 01 мая 2011

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

Вопрос в том, чтобы написать полное объявление для
Переменной с именем pmatrix, которая является указателем на массив из 8 массивов из 10 указателей на целые числа

, пока я думаю что-то вроде
int * pmatrix [8] [10],

больше интересует хорошее объяснение, чем просто ответ.
спасибо!

Ответы [ 4 ]

4 голосов
/ 01 мая 2011

Переменная с именем pmatrix, которая является указателем:

*pmatrix

в массив из 8

(*pmatrix)[8]

массивы 10

(*pmatrix)[8][10]

указатели на целые числа:

int *(*pmatrix)[8][10]

Подставляя в cdecl , нам говорят следующее:

объявить pmatrix как указатель на массив 8 из массива 10 указателя на int

вот с чего мы начали!

1 голос
/ 01 мая 2011
int*pmatrix[8][10]

Существует проблема приоритета: [] имеет более высокий приоритет, чем '*', так что это массив [8] массива [10] указателя на int.Вам нужно добавить скобки, чтобы переопределить приоритет:

int (*pmatrix)[8][10]

(возможно большее количество скобок. Я не уверен, что

int (((*pmatrix)[8])[10]);

будет улучшением, однако :-).) * +1010 *

0 голосов
/ 01 мая 2011
int** pmatrix = new int*[8]; // Array of 8 pointers to arrays
for(int i = 0; i < 8; ++i) pmatrix[i] = new int[10]; // Create each array
0 голосов
/ 01 мая 2011

Ответ на ваш вопрос будет

int* (*pmatrix)[8][10];

Помните, что массивы - это просто указатели на первый элемент массива, поэтому массив - это указатель, а указатель - это массив (иногда только из одного элемента).

Обратите внимание, что под этим массивом действительно находится одномерный массив из 80 элементов. Если вы делаете индекс как это:

int pmatrix[8][10];
pmatrix[3][5];

Компилятор обрабатывает это так, как если бы вы сделали:

*(pmatrix + (3 * 10) + 5);

, потому что индекс [3][5] обращается к элементу 5th (+ 5) подмассива 3rd (3 * 10 (10 - размер каждого подмассива)).

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