首页 > 代码库 > C语言学习笔记(6):如何从变量声明的表面上来区分指针数组和数组指针

C语言学习笔记(6):如何从变量声明的表面上来区分指针数组和数组指针

举例:
int *p[5]是指针数组
int (*p)[5]是数组指针
区分两者只要看变量名p周围的修饰符即可。

 

这里要明确两点:
1、不论int *p[5]还是int (*p)[5]都不应该看成一个整体,而应该看成一些修饰符来修饰变量p,从而使p得到准确定义;
2、[]的优先级要比*高,相同优先级修饰符,采取从左向右的编译方式。

 

*p[5]由于[]优先级高所以[]先修饰变量名p,所以p是一个数组名,然后再看其它修饰符,可以发现是一个int * 类型的数组,即p为指针数组。

(*P)[5]由于()和[]两者优先级相同,所以从左向右编译,那么*先修饰p,所以p是一个指针变量,然后再看周围的其它修饰符,可以发现p为一个int数组指针。

C语言学习笔记(6):如何从变量声明的表面上来区分指针数组和数组指针