c指针

万事开头难,博客已经开通了小半年了,一直心心念念想来写自己的博客,由于自己喜欢的是嵌入式,而嵌入式的基本语言是c语言,所谓欲利其工,必善其器,c最主要的核心就是指针了,好比单片机与中断的关系,下面说一下自己学习与师者教授的一点拙见。
(1)指针数组与数组指针
int *p[5];
int (*p)[5];
对于int a[5],我们很容易知道这表示a数组中的元素是int类型,同样的道理int p[5]等效于(int )p[5],(int *)修饰p里的元素,所以int *p[5]为指针数组,而int(*p)[5]为数组指针。
学会了区分后,我们学一下他们的使用;
数组指针:
例:int a[5]={1,2,3,4,5};
int (*p)[5]=&a;
在上面的例子中a数组用指针如何表示呢?
我们要知道&a表示整个数组的首地址,而p是数组指针,就一个指针,储存了a数组;此时p是a数组的首地址,**p是a数组的首地址的首元素,则a[3]=((*p)+2);
如果换成二维数组呢?
如果我这样赋值呢?
例:int a[2][3]={{1,2,3}{4,5,6}};
int (*p)[5]=a;
此时的a是数组的首元素的首地址,则p是a[0],(p+1)是a[1],而a[0] 是数组a的第一行的首地址,所以a[1][1]=*((*p+1)+1)。
指针数组:
例:int a[2][3]={{1,2,3},{4,5,6}};
int *p[2]={a,a+1};
此时的p是数组a第一行的首地址,(p+1)是数组a第二行的首地址,则a[1][1]=*((p+1)+1)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值