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

标签 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);
}

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

最佳答案

大小没有增加。您得到的是其他东西的大小。

在您的 printStruct 函数中,stptr 的类型为 GPS *,即指向 GPS 的指针 。指向结构的指针不同于结构实例,因此大小不必相同。

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

关于c - 为什么通过引用传递时 C 中结构的大小会增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50865386/

相关文章:

uint8_t 可以是非字符类型吗?

c - 共享内存如何与数组一起使用?

c - 在结构中使用 Option<unsafe fn ...> 的奇怪内存布局

c - 使用指针和数组时关于不兼容指针类型赋值的警告?

c - 在 pthread_create 中使用时参数会损坏

c++ - C和C++中的动态内存分配和堆有什么区别

c - 从指向数组的指针使用 memcpy

c - 打印在函数中作为参数传递的结构

c - 使用 gcc 编译我的文件时链接 fftw-3.3.6-pl2

c++ - 如何在不单独执行每个元素的情况下初始化结构内的数组? (C++)