【发布时间】:2015-12-22 23:23:43
【问题描述】:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct node
{
int id;
struct node *next;
};
typedef struct node NODE;
int main()
{
NODE *hello;
hello=(NODE *) malloc(sizeof(NODE));
hello->id=5;
printf("\nAfter malloc\n");
printf("address of hello: %d ",hello);
printf("\n");
printf("Value of Id is: %d , Value of next is: %u\n",hello->id,hello->next);
return 0;
}
我尝试执行上面的代码,得到如下输出。
输出:
马洛克之后
你好地址:16949264
Id的值为:5,next的值为:0
我的问题是,为什么hello的值没有赋值给next?
【问题讨论】:
-
hellos->next用于未初始化(未定义行为),并使用%p打印变量的地址 -
严格来说
%p是用来打印void*的数据。尝试使用这个: printf("%p", (void*)hello->next);` -
为什么会这样?
hello不是hello->next -
@MikeCAT,你是对的,需要转换为 (void *)
-
感谢您的回复,我有一个疑问,什么时候会在声明时或为它创建变量时为结构分配内存?
标签: c malloc dynamic-memory-allocation