关于2维数组问题
#include <stdio.h>
int main(void)
{
int torf[2][2]={{12},{14,16}};
int * ptr;
ptr=torf[0];
printf("%d %d\n",*ptr,*(ptr+2));
return 0;
}
输出结果为 12,14
希望高手帮小弟解答一下原因。谢谢
[解决办法]
int torf[2][2]={{12},{14,16}};
相当于:
int torf[4]={12,0,14,16};
我想现在你应该知道为啥是12,14了
[解决办法]
*ptr 相当于 ptr[0].因为 ptr=tof[0],那么 *ptr相当于 torf[0][0],所以是12.
*(ptr+2)相当于 ptr[2],因为 ptr=tof[0],那么 *(ptr+2)相当于 torf[0][2],
因为二维数组是连续存储的。 而 最大长度是 2.
所以溢出到下一个元素的地方,即 torf[1][0],即 14
[解决办法]
int * ptr;ptr=torf[0];//执行这个以后,ptr指向的是torf[0][0] (ptr+1)指向的是torf[0][1] (ptr+2)指向的是torf[1][0]