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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:11:06