c语言中如何判断与指针相关的定义是什么 ?
在学习c语言过程中,经常会与遇到这个定义到底是函数指针,指针函数,指针数组还是数组指针等。
比如以下定义:
int (*p)[];
int *p[];
int (*p)();
int (*p[])();
int *p();
如何判断如上面所定义的是什么 ,来分析下。
一句话:看优先级。
[] () *
优先级比较:[]与()属于同一优先级,采用从左到右运算;[]与()优先级都高于*。
int (*p)[]:
[]与()属于同一优先级,采用从左到右运算。p与 *结合,定义为指针,再与[]结合,则为数组指针。这是一个指针,指向的是一个数组为int型的数据。
int *p[] :
[]与()优先级都高于*。 p与 []结合,定义为数组,再与*结合,则为指针数组。这是一个数组,包含了若干个int型的指针。
int (*p)():
采用从左到右运算。p与*结合,定义为指针,再与()结合,则为函数指针。这是一个指针,指向某个函数。
int (*p[])():
采用从左到右运算。[]与()优先级都高于*,(*p[])定义为指针数组,再与()结合,则为函数指针数组。这是一个数组,包含了若干个指向函数的指针。
int *p():
[]与()优先级都高于*。p与()结合,定义为函数,再与*结合,则为指针函数。这是一个函数,返回一个int型指针数据。
其它相关指针定义,如上分析。