c指针

来源:互联网 发布:电子期刊在线阅读软件 编辑:程序博客网 时间:2024/06/16 07:01

万事开头难,博客已经开通了小半年了,一直心心念念想来写自己的博客,由于自己喜欢的是嵌入式,而嵌入式的基本语言是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)。

原创粉丝点击