【发布时间】:2015-07-31 07:49:09
【问题描述】:
程序在 32 位机器(使用 GCC)上的输出是什么?解释一下。
#include<stdio.h>
int main() {
struct node {
int data;
struct node *link;
};
struct node *p, *q;
p = (struct node *) malloc(sizeof(struct node));
q = (struct node *) malloc(sizeof(struct node));
printf("%d, %d\n", sizeof(p), sizeof(q));
return 0;
}
输出显示
4, 4.
上述程序是否与结构成员对齐填充和数据打包有关?
【问题讨论】:
-
使用
%zu打印size_t,正如其他人指出的,您正在打印指针的大小,请尝试:printf("%zu, %zu\n", sizeof(*p), sizeof(*q));
标签: c memory-management memory-alignment struct-member-alignment