Из этой ссылки, в C кажется, что следующее поведение не определено.
int my_array[100][50]; int *p = my_array[0]; p[50]; // UB
Есть ли ссылка в C ++ 03 или C ++ 11, которая подтверждает это?
Да в описании оператора +. Вы не можете разыменовать этот указатель в C, потому что он находится за указателем конца первого подмассива. В C ++ это в настоящее время допустимо, потому что указатель указывает на допустимое целое число (точки отношения определены где-то в разделе 3). Однако в обоих стандартах добавление более 50 приводит к неопределенному поведению.
DR недавно был отправлен в комитет c ++ по поводу правила, что разыменование таких указателей «допустимо из воздуха» может быть разыменовано, поэтому я бы на это не полагался.
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,
Я думаю, вы можете сделать это так.