首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于指针与二维数组的有关问题

2012-06-14 
关于指针与二维数组的问题有如下代码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。
[解决办法]
探讨

越毛界,你定义的数组是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];
[解决办法]
数组在内存中连续存储
所有的数组,在内存中都相当于一维数组

所以我从不用二维以上的数组
不管是定义还是申请,全部使用一维数组,得到的空间想怎么用就怎么用

热点排行