图解C语言中数组指针、指针数组、函数指针、函数指针数组、指向函数指针数组的指针
博客首发于CSDN
关于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 类型指针的形参


浙公网安备 33010602011771号