二维数组与指针的探索

        二维数组是一种特殊的一维数组,由类型相同、长度相等的行一维数组组成,存储空间依次相邻。可有公式  loc(a[i][j]) = a +(i*列数+j)*sizeof(元素类型).计算出元素a[i][j]的地址。

        二维数组名也代表指针,称为二维数组指针。这个指针与一维数组指针既有联系、又有区别。

        例:  int a[4][3];

        a作为二维数组的首地址,他的基类型是int[3];大小是12byte,a+1是指向一维数组a[1]的指针,a+2是指向一维数组a[2]的指针,a+3是指向一维数组a[3]的指针,因此二维数组指针a也称为行指针,每加1移动一个行数组大小的字节数。

        一维数组指针a[0]是指向第一个元素a[0][0],基类型是int,a[0]+1是指向a[0][1]的指针,a[0]+2是指向a[0][2]的指针,算术运算单位是4字节。因此,称一位数组指针是列指针,或一维指针。

        二维数组名同样也有两种含义,既是首地址,也是整个二维数组变量空间的名称。指针&a的基类型是int[4][3],sizeof(a)的值为48。

        二维数组要传址,只有行指针变量能接受,其基类型也必须是  int[3];

        例:int (*p)[3];

                p = a;


        一维指针数组

        所谓一维指针数组,就是数组元素为一维指针变量的数组。

        例:  char* a[5];     a是长度为5的一位字符型指针数组,一维数组元素a[0]、a[1]、a[2]、a[3]、a[4]都是一级字符型指针变量,他们各自可以指向一维字符数组(字符串)。

        由定义,数组a的元素类型是char*,指向数组a的指针类型应是char**,称为二级指针。

        char** pa;

        pa = a;


        为什么要介绍一维指针数组呢,通过一维指针数组与二维数组的比较,大家就会知道指针数组的好处。

       例:   char  cColor[4][7] = {"white","red","orange","pink"};

                  char *pColor[4]={"white","red","orange","pink"};

       cColor是一个4行7列的二维字符数组,共28个元素,占用内存28byte。pColor是指针数组,有4个元素,每个元素占4byte,用于存放指向字符串的指针,共占内存16byte。给二维数组赋值时,必须指明行和列(列长度是字符串长度+1),由于各个字符串的长度不一定相同,列长度必须是最长的那个,这将造成内存空间的浪费。

给指针数组赋值时,数组元素的大小都一定,为4byte,系统根据每个字符串的长短,各自分配合适大小的数组空间(这些数组空间可能不相邻),然后将字符串首地址赋给相应的指针数组元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值