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

为何指针e使用.而非->运算符?C语言结构体指针访问疑问

稀疏矩阵代码的运行结果与疑问解答

代码运行示例

假设输入如下:

Enter Dimensions :
3 3
Enter number of non-zero elements :2
Enter i, j, x :
0 0 5
1 1 7

对应的输出为:

5 0 0 
0 7 0 
0 0 0 

核心疑问解答

你观察到的e[something]后用.而非->是完全正确的,原因很明确:

  • s->e是指向struct element结构体的指针,当使用下标[k]时,s->e[k]等价于*(s->e + k)——这一步是对指针做了解引用操作,得到的是实实在在的struct element结构体变量,而非指针。
  • 在C语言里,访问结构体变量的成员必须用.运算符;只有当操作对象是结构体指针时,才需要用->运算符。

举个直观的对比:
如果单独定义一个结构体指针:

struct element *ptr = s->e;

访问第一个元素的成员可以写成ptr->i,这等价于(*ptr).i;但访问第k个元素时,ptr[k]已经是解引用后的结构体变量,所以必须写成ptr[k].i,和你代码里的s->e[k].i逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:35:30