typedef struct Node {
int data;
struct Node *next;
} node;
pointer->next = (node*)malloc(sizeof(node));
在上面的代码中,pointer->next
动态地给出了多少字节的内存。对于(int*)malloc(sizeof(int))
,给出了2个字节。同样node
的数量是多少?
答案 0 :(得分:1)
Malloc会在动态上指定" node"的大小。
Node是一个结构,每个结构的大小取决于结构中每个元素的大小。
在这种情况下,节点的大小将是:int的大小+ struct Node的大小* (如果结果不是2的倍数,则会出于架构原因进行填充) 您的设备具有2个字节的体系结构,因此,结构的大小只能是2,4,6,8等......
int的大小取决于您正在处理的目标。由于您的体系结构是16位,因此int的大小为2个字节。
关于。 struct Node *的大小,您需要知道每个指针数据类型具有完全相同的大小,它们指向的数据类型并不重要。而这个大小也取决于架构。同样,您的体系结构是16位,这就是结构节点*的大小为2个字节的原因。
int = 2的大小。
struct node的大小* = 2
malloc指定的总内存= 2 + 2 = 4
答案 1 :(得分:1)
在不了解您的系统的情况下,我们无法告诉您。您可以使用相同的代码并在多个编译器上进行尝试,您将获得不同的答案。你必须使用sizeof(node)
或sizeof(struct Node)
检查自己(我认为这两种语法都有效,但以防万一)。
答案 2 :(得分:1)
首先,建议:重写
pointer->next=(node*)malloc(sizeof(node));
作为
pointer->next = malloc( sizeof *pointer->next );
你不需要演员表(除非你正在进行ANSI之前的实现,在这种情况下上帝帮助你),并使用解除引用的目标作为sizeof
的操作数意味着你不必指定类型,可能会为你节省一些维护胃灼热。
另外,一个小小的空白有很长的路要走(虽然你不需要在功能参数周围添加空白 - 这是我的风格,有些人不喜欢它,但它会让对我来说更容易阅读)。
动态地为指针 - >下一个
提供多少字节的内存
至少与sizeof (int)
加sizeof (struct Node *)
一样大,可能更大;根据您的平台,它可以小到4个字节或大到16个.C允许"填充" struct成员之间的字节数,以满足底层架构的对齐要求。例如,特定体系结构可能要求所有多字节对象在4的倍数的地址上对齐;如果您的data
成员只有2个字节宽,则它与next
成员之间将有2个未使用的字节。