添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
「C语言」指针数组 数组指针 指针函数 函数指针

「C语言」指针数组 数组指针 指针函数 函数指针

相信很多人和我一样,有着这样的恐惧,那就是这四个玩意怎么也分不清,这都是啥啥啥啥呢?今天我们来具体分析一下。其实要具体了解这四个概念,只需要了解符号 优先级 ,并关注 最后两字 ,你就成功了一半。

符号优先级

在一个表达式中可能包含多个不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的结合顺序可能得出不同结果甚至出现运算错误。所以表达式必须按一定的顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。所以请牢牢记住下面三个符号的优先级判断,这对今天理解这四个概念,十分重要!

(内) > [ ] >  *

指针数组

指针数组:一个数组,数组的元素是一个指针!

常用形式: 类型 *变量[长度]

int *p1[10]
由于[]的优先级比*更高
p1表示一个10个元素的数组
int* 表示元素是一个指向int的指针
即:p1[0],p1[1]...各自装着一个int指针
*/

指针数组比较容易理解,就是一个数组,里面装的是指针!

数组指针

数组指针:一个指针,而指针的指向是一个数组!

常用形式: 类型 (*变量)[长度]

有时候我们也把数组指针成为“行指针”,遇到多维数组的时候经常使用。

int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int (*p)[4];
p = (int(*)[4])a;
for(int i=0;i<3;i++) {
    for(int j=0;j<4;j++) {
      printf("%d\n", *(*(p+i)+j)); 
}

指针函数

指针函数:一个函数,函数的返回值是一个指针!

常用形式: 返回类型 * 函数名(形参类型 形参名)

int * max(int *a,int *b) {
    return (*a > *b) ? a : b;
} 

指针函数也比较容易理解,就是返回的是一个指针的函数。

函数指针

函数指针:一个指针,指针指向的是一个函数!

常用形式: 返回类型 (*变量)(形参类型)

int (*func) (float, float); 
(*func)表明func是一个指针,指向一个函数
前面int,表示该返回值
后面的两个float表明该函数的两个形参类型
*/

举个例子:

int sum(int a, int b) {
    return a + b;
int main() {