【C语言】一招搞定C语言各种复杂指针

从变量名开始看,一步步往外分析。

1. int *p1;

定义了一个变量p1,前面的*表示p1是一个指针,指向什么?指向一个int类型的数据。

2. int *p2[5];

从变量名看,定义了一个变量p2。注意,[]的优先级比*高,所以p2是一个数组。数组的每个元素是什么类型?前面的*表示每个元素都是指针。指向什么?指向一个int类型的数据。

3. int (*p3)[5];

从变量名看,定义了一个变量p3。因为用()改变了优先级,所以先看**表示p3是一个指针。指向什么?注意,表示数组的int [5]也是一种类型,所以p3是一个二维数组指针。(一维数组指针指向的是数组的第0个元素。二维数组同理,指针指向的是二维数组的第0个元素,也即一个一维数组)

4. int *p4(int, int);

这不是指针,这是声明了一个函数p4()。返回值是指向int类型的指针,参数是int, int

5. int (*p5)(int, int);

从变量名看,p5是一个指针,后面的()是函数参数,所以p5是一个函数指针。函数的返回值是int,参数是int, int

6. int *(*p6)(int, int);

p6p5大致相同,除了指向的函数的返回值是int *(指向int类型的指针)。或者你也可以理解为p6是指向p4()函数的函数指针。

7. int *(*p7[5])(int, int);

p7是一个指针数组,每个元素都是和p6一样的函数指针。

基本上常用的就这些了,其他的你可以自己理解。(如果不能的话,在重新看一遍!)

猜你喜欢

转载自www.cnblogs.com/HuZhixiang/p/12762694.html