c - 为什么我在 C 代码中使用 x->y = z 而不是 x.y = z?

标签 c pointers struct abstract-data-type

我按照说明为灵活数组创建代码,我被告知使用 x->y = z 而不是 x.y = z。使用指针而不是仅仅正常赋值的原因是什么?

此代码包含一个自定义库 flexarray.h,我将其放在底部

flexarray.c:

struct flexarrayrec{
   int capacity;
   int itemcount;
   int *items;
};

flexarray flexarray_new(){
   flexarray result = emalloc(sizeof *result);
   result->capacity = 2;
   result->itemcount = 0;
   result->items = emalloc(result->capacity * sizeof result->items[0]);
   return result;
}

flexarray.h:

#ifndef FLEXARRAY_H_
#define FLEXARRAY_H_

typedef struct flexarrayrec *flexarray;

extern void flexarray_append(flexarray f, int item);
extern void flexarray_free(flexarray f);
extern flexarray flexarray_new();
extern void flexarray_print(flexarray f);
extern void flexarray_sort(flexarray f);

#endif

最佳答案

x->y这只是语法糖

(*x).y

看起来像flexarray只是 *flexarrayrec 的 typedef , 所以当你写 flexarray result ,编译器会将其“转换”为

flexarrayrec *result = emalloc(sizeof(flexarrayrec));

所以 result.capacity ,例如,没有任何意义,因为指针只是一个数字(内存地址),“它没有任何字段”。 (*result).capacity可以,但是写这么多星号和括号会让人沮丧,这就是我们使用 -> 的原因运营商:)

关于c - 为什么我在 C 代码中使用 x->y = z 而不是 x.y = z?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25658156/

相关文章:

c - 了解使用 SSE 指令进行矢量化

C fopen 在 eclipse 中运行时不会打开文件

C++奇偶数组,无限答案

c - 在指向结构的指针上打印错误值

c - typedef 可能未声明或不明确

c - OPENMP - 带前提条件的并行化 Schwarz 算法

c - 存储指针的整数差异?

c++ - 链表静态类成员

c - 在C中的链表内添加元素到链表

c - 为什么我的 C 结构必须添加一个奇怪的 int 并且它会影响指针?