关于指针与二维数组的有关问题
关于指针与二维数组的问题有如下代码C/C++ code#include stdio.hint main (void){int * ptrint torf[2]
关于指针与二维数组的问题
有如下代码
C/C++ code#include <stdio.h>int main (void){ int * ptr; int torf[2][2] = {12,14,16}; ptr = torf[0]; printf ("*ptr = %d,* (ptr + 2) = %d\n",*ptr,* (ptr + 2)); return 0;}
运行的结果是 12 16
在这里的话 使用指针来处理数组的时候是不是torf[2][2]里面的元素被当做以为数组来处理了 。因为如果是当做二位数组处理的话 * (ptr + 2)应该是越界了啊。
求解释 是不是这样的
[解决办法]越毛界,你定义的数组是torf[2][2],其实二维数组也是连续存放的,所以你在内存空间内有4个连续的int型变量。而你把torf[0]的地址赋值给了指针,那么这个Int型指针获得了指向这个数组的首地址,而且指针每次加1,都表示地址+sizeof(类型)。所以你的p+2就指向了第三个数据---16。
[解决办法][解决办法]ary[0]就是第一行的首地址,在这一行里的数组都是像一维数组一样连续存储的~~~
如果是3维,就地址就是这样表示咯:
C/C++ code int *p=0; int ary[2][2][2]={{1,2},{3,4}}; p=ary[0][0];
[解决办法]
数组在内存中连续存储
所有的数组,在内存中都相当于一维数组
所以我从不用二维以上的数组
不管是定义还是申请,全部使用一维数组,得到的空间想怎么用就怎么用