【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 一样的函数指针。

原文地址:https://www.cnblogs.com/HuZhixiang/p/12762694.html