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

结构体类型中星号的使用位置及两种写法差异咨询

结构体指针中星号位置的那些事儿

嘿,这个问题绝对是C语言圈子里的经典“风格口水仗”了——本质上两种写法没有语法对错之分,核心差异是编码习惯和对语法本质的侧重,我给你拆解明白:

先划重点:两种写法完全等价

不管是struct node* x还是struct node *x,编译器都会直接解析为:变量x是一个指向struct node类型的指针。它们在编译后的结果没有任何区别,纯粹是写法上的偏好。

两种写法的风格差异

1. struct node* x:强调“指针类型”

这种写法把struct node*当成一个完整的“指针类型”来看,更符合“类型 + 变量名”的直觉逻辑。比如你会写int num,那struct node* x看起来就像是“指针类型struct node*”加上变量x,新手更容易理解x的类型是指针。

但这里有个容易踩的坑:如果同时声明多个变量,比如:

struct node* x, y;

很多人会误以为x和y都是指针,但实际上只有x是指针,y是普通的struct node变量!因为C语言里星号*是绑定到单个变量名的,不是绑定到前面的类型。

2. struct node *x:贴近语法本质

这种写法更忠实于C语言的语法规则——星号*属于变量,而不是类型。它清晰地告诉你:“x是一个指针,指向struct node类型”。

用这种写法声明多个变量时,陷阱就很明显了:

struct node *x, y;

一眼就能看出来x是指针,y是普通结构体。如果想让两个都是指针,必须给每个变量都加星号:

struct node *x, *y;

很多老派C程序员或者注重语法严谨性的团队会偏好这种写法,因为它能避免多变量声明时的误解。

星号的“正确”位置:没有绝对答案,只有一致规范

其实不存在绝对的“正确位置”,关键是保持风格一致:

  • 如果是个人项目,选你看着顺眼、用着顺手的就行;
  • 如果是团队协作,严格遵循团队的编码规范——统一的风格能让代码可读性更高,减少不必要的沟通成本。

另外,如果你想彻底避免多变量声明的陷阱,最好的办法是一个声明只写一个变量,比如:

struct node* x;
struct node* y;

这样不管用哪种风格,都不会出错。

内容的提问来源于stack exchange,提问作者MSD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:59:02