0

这是我的结构的定义

    typedef struct treeNode
     {
        int data,pos;
        char name[16];
        struct treeNode *left;
        struct treeNode *right;
     }treeNode;

我创建了一个动态对象

treeNode *temp;
            temp = (treeNode *)malloc(sizeof(treeNode));

如果我必须为数据分配一个值,我应该如何分配

scanf("%d",temp->data);   //or
scanf("%d",&(temp->data)); //why? because all scanf will look for is address to a location which could be done by temp->data;

这也适用于访问数据,即我应该如何访问整数部分?

temp->data; //or
*(temp->data) 
4

2 回答 2

2

scanf("%d",&temp->data);

因为 scanf() 需要变量的地址。对于每个转换说明符,scanf() 期望对应的参数是一个指向正确类型的指针:%d 期望一个 int * 类型的参数,%f 期望一个 double * 类型的参数,%c 和 %s 都期望一个参数char * 等类型的

scanf() 的行为提供了有关 scanf() 的更多信息。

for 访问temp->data就足够了,因为它本质上等同于(*temp).data.

如果您尝试访问*(temp->data),则会触发未定义的行为。因为,您正在访问可能在其他进程上下文中的内存位置。

假设 temp->data 为 100,则 *(temp->data) 表示 *(100),即访问内存位置 100。

于 2012-12-05T06:31:49.173 回答
0

每当您想设置传递给函数的参数的值时,您需要发送地址。由于您希望 scanf 填充该参数的值,因此您需要使用地址。(请注意,如果 struct 元素已经是一个指针(已分配内存),则不需要 &)。

但是,当您想阅读某些内容时,无需使用地址。你可以直接使用它。

于 2012-12-05T06:35:59.630 回答