【发布时间】:2021-08-28 20:44:55
【问题描述】:
基本上,我的问题可以概括为“在 C 中只有 .、* 和 () 相当于 a->b->c->d 是什么?”
我正在练习用 C 语言创建一个链表,以重现 Python 列表的一些行为并更好地理解该语言。我有一个基本结构来控制我的列表
typedef struct _list
{
Element* first;
Element* last;
int length;
int* test_for_more_fun;
} Liste;
然后在我的 main() Liste* liste=NULL; 中声明一个空指针,并发送他的地址以便能够修改它指向 init(&liste); 的内容。
然后init()分配内存
void init(Liste** _liste)
{
*_liste=(Liste*)malloc(sizeof(Liste));
(**_liste).test_for_more_fun=(int*)malloc(sizeof(int));
然后我想访问字段 first、last 和 length,我发现这样做的方法
(*_liste)->first=NULL;
_liste[0]->last=NULL;
但是,假设 first 和 last 也是指针的指针,我不确定这个技巧是否仍然有效,所以我问自己:如果没有->,我该怎么办?我浏览了网页没有答案,C 编程语言书页 118 说
括号在 (*pp).x 中是必需的,因为结构成员 operator 的优先级。高于*。表达式 *pp.x 表示 *(pp.x),这里是非法的,因为 x 不是指针。
所以我尝试了(*_liste).(*first),因为() 运算符具有与-> 相同的优先级,我希望它可以工作但没有,*(*_liste).first,但又不起作用。谁能解释一下为什么这两种方法不起作用,正确的方法是什么?
最好的问候
【问题讨论】:
-
Liste* liste=NULL;不是空指针
标签: c pointers struct linked-list