C语言内存分配中*符号位置前后不同的原因咨询
C语言指针符号
*位置差异的原因解析 我是C语言初学者,知晓*为指针符号。相关代码如下:
Person * father = (Person *) malloc(sizeof(Person)); Marriage * marriage = (Marriage *) malloc(sizeof(Marriage)); (* marriage).male = father;请问为何上述代码中*符号有时位于类型后变量前,有时位于变量前,出现这种位置差异的原因是什么?
这个问题其实是C语言里指针符号*的两种核心用法,本质是变量声明和指针解引用的区别,我给你拆解得明明白白:
类型后变量前的
*:声明指针变量
比如Person * father,这里的*是用来向编译器传递关键信息:father不是普通的Person类型变量,而是指向Person类型的指针变量。这里要注意一个容易踩坑的点:C语言里*是和变量绑定的,如果你写Person* father, son;,只有father是指针,son还是普通的Person变量,所以很多人习惯把*挨着变量写,避免误解。变量前的
*:对指针进行解引用操作
再看(* marriage).male = father;里的* marriage,这里的*是解引用操作符。它的作用是“穿透”指针,直接访问指针marriage所指向的内存空间里的内容——也就是那个通过malloc分配出来的Marriage结构体实例。只有通过解引用,我们才能访问结构体的成员male。
最后给你个小福利:针对结构体指针的成员访问,C语言提供了更简洁的语法糖->,上面的(* marriage).male完全可以写成marriage->male,功能一模一样,但代码可读性会高很多哦~
内容的提问来源于stack exchange,提问作者KB_Shayan
相关产品推荐
相关产品推荐

