为何指针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
相关产品推荐
相关产品推荐

