关于C语言中数组指针、函数指针、指针数组、函数指针数组、指向函数指针数组的指针一直比较绕,稍微整理一下。
到底是指针还是数组?
其实到底是指针还是数组还是看变量名与[]
先结合还是*
先结合。我们知道C语言中的优先级 () = [] > *
,且()
和[]
是从左向右
结合,所以int * arr[6]
其实是一个数组,因为 arr
先与[]
结合定义一个数组,其次才是*
。然而int (*pt)[6]
是一个指针,因为 ()
的优先级和[]
相同,且从左向右结合,导致 pt
先与*
结合定义一个指针
指针数组
int * arr[6]
指针数组首先是个数组。数组中的每个(6个)元素都是指针(指向 int 类型的指针)
数组指针
int (*pt)[6]
数组指针首先是个指针。指针指向一个数组(包含 6 个元素),该数组每个元素都是 int 类型。pt 是指针的名字,数组的名字未知。指针的值是某个数组的地址
函数指针
int * (*pt)(char *c)
函数指针首先是个指针。指针指向一个函数,该函数返回一个 int 类型指针,接受一个 char 类型指针的形参。pt 是指针的名字,函数的名字未知。指针的值是某个函数的地址
函数指针数组
int * (*arr[6])(char *c)
函数指针数组首先是个数组。这个数组(包含 6 个元素),每个元素都是一个函数指针。这些指针都指向某一个函数,该函数返回一个 int 类型的指针,接受一个 char 类型指针的形参
指向函数指针数组的指针
int * (*(*pt)[6])(char *c)
指向函数指针数组的指针首先是个指针。指针指向一个数组(包含 6 个元素),该数组每个元素都是一个函数指针。这些指针都指向某一个函数,该函数返回一个 int 类型的指针,接受一个 char 类型指针的形参