我一直在尝试理解结构,以及它们的大小如何根据声明的顺序成员而有所不同,以及填充和对齐如何与之关联。
当我声明如下所示的结构时,我得到了我预期的内存大小,即 4 个字节。
typedef struct {
int x;
} GPS;
int main()
{
GPS st;
st.x = 42;
int size;
size = sizeof(st);
printf("\n Size: %d", size);
return 0;
}
但是当我通过对函数的引用传递结构时,结构将其大小增加到 8 个字节,我不确定为什么。我阅读了有关位对齐和填充的所有内容,但似乎与大小的增加没有任何关系。
typedef struct {
int x;
} GPS;
int main()
{
GPS st;
st.x = 42;
printStruct(&st);
return 0;
}
void printStruct(GPS *stptr)
{
int size;
char *ch = (char *)stptr;
size = sizeof(stptr);
printf("Size: %i \n", size);
}
所以我的问题是,为什么通过引用传递时结构体的大小会增加?
最佳答案
大小没有增加。您得到的是其他东西的大小。
在您的 printStruct
函数中,stptr
的类型为 GPS *
,即指向 GPS 的指针
。指向结构的指针不同于结构实例,因此大小不必相同。
如果您使用了 sizeof(*stptr)
,即 stptr
指向的大小,您将获得您期望的值。
关于c - 为什么通过引用传递时 C 中结构的大小会增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50865386/