指针数组和数组指针实践1

int (*p)[3];    //指向一个数组,数组有3个元素,每个元素是一个int型整数
 int a[3][3];
 p= a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
 p++;       //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]
 p= &a;     //这样是错误的
 

如果是下面这样:

  1. int (*p)[3];  //定义数组指针

  2. int a[3]; //定义一维数组

  3.  p= &a; //需要&符

  4.  p= a; //这样是错误的

这里为什么与要加上&呢     因为  p 本质是一个指向整个数组的指针  &a 代表的是整个数组的首地址,指向了整个数组     a代表的是数组首个元素的地址 是一个单纯的地址  (&a 与 a在数值上相同)  而在C语言中,赋值符号“=”号两边的数据类型必须是相同的,p= &a; 是将整个数组的首地址赋值给p而p= a;  则是将一个指针赋值给p 这样子是错误的

同理,如果是二维数组 a则直接表示一个一维数组的首地址(a[][3])  而&a 则表示一个二维数组的首地址 所以赋值会出现错误
 

  1. int *p[3]; //定义指针数组

  2. int a[3];

  3. p[0] = a[0]; //p第一个元素存放a的第一个元素的地址

  4. p[1] = a[1]; //p第二个元素存放a的第二个元素的地址

  5. ————————————————
    版权声明:本文为CSDN博主「Z小旋」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/as480133937/article/details/92122982

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值