C语言结构体中如何用逗号在同一行声明多个指针类型成员变量
问题原因
C语言的指针声明语法中,*修饰符是绑定到紧跟其后的变量名,而非绑定到前面的类型名。
你最初写的NODE* front, rear;等价于:
NODE *front; NODE rear;
所以只有front是NODE*指针类型,rear会被识别为NODE结构体类型,给结构体类型赋值NULL自然会触发类型不兼容报错。
同一行声明多个同类型指针的正确写法
每个指针变量前都单独加*修饰符即可,示例如下:
struct queue { NODE *front, *rear; int size; };
这种写法下,front和rear都会被正确识别为NODE*指针类型,和你分开两行声明的效果完全一致。
补充说明
- 写声明的时候把
*紧贴变量名,而非紧贴类型名,可以有效避免这类语法歧义问题,是C/C++代码中比较推荐的书写习惯。 - 如果不想每个变量都加
*,也可以用typedef给指针类型单独起别名:
这种写法下,因为别名本身已经是指针类型,同一行声明的多个变量都会是指针类型,不会出现歧义。typedef NODE* NODE_PTR; struct queue { NODE_PTR front, rear; // 两个都是NODE*类型 int size; };
内容的提问来源于stack exchange,提问作者Akshxy X
相关产品推荐
相关产品推荐

