Can I access multidimensional array using a pointer?

前端 未结 2 646
渐次进展
渐次进展 2020-12-11 07:56

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

相关标签:
2条回答
  • 2020-12-11 08:13

    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.

    0 讨论(0)
  • 2020-12-11 08:18
    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.

    0 讨论(0)
提交回复
热议问题