Могу ли я получить доступ к многомерному массиву, используя указатель? - PullRequest
4 голосов
/ 08 декабря 2011

Из этой ссылки, в C кажется, что следующее поведение не определено.

int my_array[100][50];
int *p = my_array[0];
p[50]; // UB

Есть ли ссылка в C ++ 03 или C ++ 11, которая подтверждает это?

Ответы [ 2 ]

6 голосов
/ 08 декабря 2011

Да в описании оператора +. Вы не можете разыменовать этот указатель в C, потому что он находится за указателем конца первого подмассива. В C ++ это в настоящее время допустимо, потому что указатель указывает на допустимое целое число (точки отношения определены где-то в разделе 3). Однако в обоих стандартах добавление более 50 приводит к неопределенному поведению.

DR недавно был отправлен в комитет c ++ по поводу правила, что разыменование таких указателей «допустимо из воздуха» может быть разыменовано, поэтому я бы на это не полагался.

0 голосов
/ 08 декабря 2011
int my_array[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
for(i=0;i<3*3;i++)
{
    printf("%d,",*(*my_array+i));
}

вывод 1,2,3,4,5,6,7,8,9,

Я думаю, вы можете сделать это так.

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