C指针

来源:互联网 发布:qserialport 发送数据 编辑:程序博客网 时间:2024/06/06 18:08

指针:基础概念

指针数组:(int数组,char数组),概念类比,指针数组,就是装有指针的数组 char *p[2];

数组指针:(int指针,float指针),概念类比,数组指针,就是指向数组的指针 char (*p)[2]; 数组指针是二维指针

多重指针: char **p;

函数指针:指向函数的指针,该指针原型必须和要指向的函数原型一致(返回值 ,参数列表)。函数的本质是内存地址。int (*p)(int ,int);

这个函数指针,比如int (*p)(int ,int); 像这样的,该指针指向的函数返回值是int ,不是int*;这点不要搞混淆


详细说明一下:

申明c指针变量,并不开辟要储存其他值的地址空间,仅仅是自己本身的空间。

数组指针:本质是指针,指向数组首元素的地址。例如:

char (*p)[2]是数组指针,指针p指向数组的首地址,这个指针不可移动。

指针数组:本质为数组,数组每一个元素是一个指针。例如:

*p[2]是指针数组,实质是一个数组,里面的两个元素都是指针。


区分是指针数组,还是数组指针,就看*和[]谁的体现的级别高:

如果 * 用括号括起来的,说明* 体现的优先级高,是指针,所以是数组指针(例如 char (*p)[2]);

[]比* 的优先级高,如果没有括号的话,自然就是[]体现的优先级高于 *,是数组,所以是指针数组(例如 char *p[2]);


一个数组:int a[10]

a 和 &a 在数值上是相等的,在语义上不同,a仅仅代表首元素的首地址,代表第一个元素地址;&a整个数组的首地址,代表数组地址;

举例说明一下:a + 1 和 &a + 1 的区别:a + 1 跳过4 个字节;&a + 1 跳过40个字符。


指针数组 等价于二重指针

数组指针 等价于二维数姐



原创粉丝点击