一维数组和二维数组的差异(指针与数组)

  数组的分类:

常见的数组有一维数组及二维数组,

a[100] ,a[100][100]。前者是一维数组,表示有100个储存位,类似于数轴的X轴。后者是二维数组,表示有100X100个储存位,类似于平面数轴XY。

 数组于指针的关系

数组用来储存多个数值或字符,貌似和指针并无联系,但数组其实就是一个默认的常量指针。

例如数组int a[100],它就相当于int *const a;其中a的初值是a[0]的地址,a=&a[0];数组名就是数组的首地址。

对于数组中依次输出a[0],a[1]。。。a[i],就相当于指针&a[i]=a+i;就是首地址移动到i个元素地址。对于a[i]的值,我们同样可以用指针a 来表示:a[i]=*(a+i);

实例演示

  int a[5]={5,2,1,0,0};

int *p=a;

int *constp1=a;

  for(i=0;i<5;i++)

{

   printf(“%d”,a[i]);

   printf(“%d”,*(a+i));

   printf(“%d”,*(p+i));

   printf(“%d”,*(p1+i));

}

对于以上四种输出,显然他们的输出都是52100,得证a[i]可以用*(a+i)表示,数组名a是一个指针,而且是一个常量指针;

 

指针数组与数组指针

int *a[10];    //指针数组,是数组,存放有10个指针的数组,可以用指针来表示这个指针数组(指针的指针)

int (*a)[10];   //数组指针,是指针,是指向每行10个元素的指针,例如((*a)[10]={0}),a就是这十个数据所在数组的头地址。

二维数组与一维数组指针用法的区别:

首先,定义一个一维数组和一个二维数组

int a1[10];

int a2[5][10];

int (*p)[10];//指向每行十个元素的指针

 

a1=int *p;//指向a1的头地址a[0];

&a1=int (*p)[10]; //指向a1 这个数组

a2= int(*p)[10]; //指向二维数组a2的一行;

&a2=int (*p)[5][10]; //指向a2这个二维数组

 

有 &a1和a2是等价的,都表示指向一个有是个数据的数组(或数组的一行)

P=&a1;

P=a2;

 **一维数组和二维数组的指针加减法同样存在差异***

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值