From this reference, In C it seems the following behavior is undefined.
int my_array[100][50];
int *p = my_array[0];
p[50]; // UB
Is there a reference in C++03 or C++11 which confirms this?
From this reference, In C it seems the following behavior is undefined.
int my_array[100][50];
int *p = my_array[0];
p[50]; // UB
Is there a reference in C++03 or C++11 which confirms this?
Yes in the description of the + operator. You may not dereference that pointer in C because it is a past the end pointer for the first subarray. In C++ this currently is legal because the pointer points to a valid integer (the points to relation is defined somewhere in clause 3). However in both standards adding more than 50 yields undefined behavior.
A DR was recently sent to the c++ committee about the rule that dereferencing such "valid out of thin air" pointers may be dereferenced, so i would not rely on that.
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));
}
output is 1,2,3,4,5,6,7,8,9,
I think you can do it like that.