将 sizeof() 与结构一起使用
Using sizeof() with struct
考虑
struct abc
{
int a;
int b;
};
sizeof(struct abc)
和 sizeof(struct abc*)
有什么区别?
第一个 sizeof
将 return 结构的大小,第二个 return 是您计算机上指针的大小(可能是 64 位)。
很难猜测第一个 sizeof
将 return 是什么,因为结构的填充 and/or 对齐约束因编译器和编译器或 ABI 不同而不同。
在您的示例中,如果您打印两个 sizeof() 操作的结果,它们可能是相同的(这取决于您的系统),但这是巧合。如果更改结构的大小,您可以更清楚地看到差异。
#include <stdio.h>
struct abc
{
int a;
int b;
int c;
};
int main(int argc, char *argv[])
{
printf("sizeof(struct abc): %ld\n", sizeof(struct abc));
printf("sizeof(struct abc *): %ld\n", sizeof(struct abc *));
return 0;
}
这将打印(同样,取决于您的系统,但这是您将在 64 位 unix 上得到的):
sizeof(struct abc): 12
sizeof(struct abc *): 8
从中你可以猜出区别:第一个显示结构的大小,第二个显示指针的大小。
考虑
struct abc
{
int a;
int b;
};
sizeof(struct abc)
和 sizeof(struct abc*)
有什么区别?
第一个 sizeof
将 return 结构的大小,第二个 return 是您计算机上指针的大小(可能是 64 位)。
很难猜测第一个 sizeof
将 return 是什么,因为结构的填充 and/or 对齐约束因编译器和编译器或 ABI 不同而不同。
在您的示例中,如果您打印两个 sizeof() 操作的结果,它们可能是相同的(这取决于您的系统),但这是巧合。如果更改结构的大小,您可以更清楚地看到差异。
#include <stdio.h>
struct abc
{
int a;
int b;
int c;
};
int main(int argc, char *argv[])
{
printf("sizeof(struct abc): %ld\n", sizeof(struct abc));
printf("sizeof(struct abc *): %ld\n", sizeof(struct abc *));
return 0;
}
这将打印(同样,取决于您的系统,但这是您将在 64 位 unix 上得到的):
sizeof(struct abc): 12
sizeof(struct abc *): 8
从中你可以猜出区别:第一个显示结构的大小,第二个显示指针的大小。