为什么在通过引用传递时C中结构的大小增加

时间:2018-06-14 20:24:28

标签: c struct

我一直在尝试理解结构以及它们的大小如何根据声明成员的顺序以及填充和对齐与之关联的方式而有所不同。

当我声明结构类似于下面看到的结构时,我得到了我期望的内存大小,即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);
}

所以我的问题是,为什么结构在通过引用传递时会增加?

2 个答案:

答案 0 :(得分:7)

尺寸不增加。你获得了其他东西的大小。

printStruct函数中,stptr的类型为GPS *,即指针GPS。指向结构的指针与结构实例不同,因此尺寸不必相同。

如果您使用sizeof(*stptr),即stptr指向的大小,您将获得预期的价值。

答案 1 :(得分:1)

指针是8个字节。当您通过引用传递时,您实际上发送的指针不是实际的结构。