You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:24:01