我按照说明为灵活数组创建代码,我被告知使用 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/