【发布时间】:2011-02-06 11:23:25
【问题描述】:
这段代码有什么错误?为什么我不能以我尝试的方式取消引用元素。
#include<stdio.h>
typedef struct
{
int value;
struct node * left;
struct node * right;
} node;
int main() {
node* root,*temp;
root = (node*) malloc(sizeof(node));
root->value = 10;
(root->left)= (node*) malloc(sizeof(node));
(root->right)=(node*) malloc(sizeof(node));
((root->left)->value) =20; // WHY AN ERROR HERE???
}
【问题讨论】:
-
不要对结构进行 typedef。它已经有一个类型作为结构 - 你所做的只是让你的代码更复杂。
-
@Felice Pollano 除了一大堆警告:错误:取消引用指向不完整类型的指针
-
@Blank Xavier 嗯,typedef 允许你在使用时省略结构体,这样可以使代码更易于阅读。
-
@Phihag:它隐藏了底层类型。当且仅当对类型的所有操作都通过函数发生时,这正是您想要的。在这种情况下,由于它是一个结构,并且我们将它用作结构(例如“->”),那么我们需要知道它是一个结构,所以隐藏它的类型是没有用的。它给读者带来了额外的负担,他们必须记住我们拥有的每个 typedef 的底层类型,而这些类型不是仅限函数操作的。
-
@Blank Xavier:我理解您的考虑,但正如@phihag 所说,更易读的代码也非常方便。此外,我们使用 -> 就足以知道它是一个结构......
标签: c pointers data-structures