普通指针和数组指针学习总结

对于普通指针,看下面代码

 int a[5] = {3,2,6,7,5};
 int *pp = a; //指针pp指向数组a
 printf("%p\n",pp); // 输出的是数组a的地址,也是数组a第一个元素的地址
 printf("%d\n", *pp); // 加上解引用*,得到的是数组a第一个元素的值
 printf("%d\n", pp[0]); // 数组a第一个元素的值
 printf("%d\n", *pp[0]); //编译错误

运行结果(去掉最后一行代码)

0x7fffcbad7730
3
3

好了,再看一下数组指针

int a[5] = {3,2,6,7,5};
int (*p)[5] ; // 声明一个数组指针P
p = &a; // 这里就体现和上面的不同了,上面是直接 pp = a ,但是这里要写 p = &a 
printf("%p\n", p); //输出的是a的地址
printf("%p\n",*p); //猜猜这里输出的是什么,依然是a的地址 (*p)表示数组a本身,所以输出的是a的地址
printf("%p\n",p[0]); //输出的依然是a的第一个元素的地址
printf("%d\n", *p[0]); //这样才会输出a的第一个元素的值
printf("%d\n", *p[1]); //输出的不是a中第二个元素的值,而是一个很大的无效的值

运行结果:

0x7fffa20fbdc0
0x7fffa20fbdc0
0x7fffa20fbdc0
3
32767

好了总结下,数组指针和普通指针相比,感觉是多取了一次地址的样子,数组指针很多时候用于指向二维数组中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值