在C语言中,如果一个结构由一个int指针和一个int变量本身组成,它有多少字节?

在C语言中,如果一个结构由一个int指针和一个int变量本身组成,它有多少字节?,c,struct,C,Struct,例如: struct myCar{ int price; int *uniqueID; }; 在C语言中,int有4个字节。我假设指针也占用4个字节?因此,i386总共有8个字节,是的 然而,这是一个很大的假设。事物的大小就是它的大小。使用sizeof(struct myCar)获得架构的答案 我的sizeof(int)=8。查找: printf("Size of my struct is: %zu\n", sizeof(struct myCar)); 指针的大小取决于平台。因此

例如:

struct myCar{
   int price;
   int *uniqueID;
};
在C语言中,int有4个字节。我假设指针也占用4个字节?因此,i386总共有8个字节,是的

然而,这是一个很大的假设。事物的大小就是它的大小。使用sizeof(struct myCar)获得架构的答案

我的sizeof(int)=8。

查找:

printf("Size of my struct is: %zu\n", sizeof(struct myCar));

指针的大小取决于平台。因此,
int
的大小取决于平台。如果您使用的是64位计算机,则这两种情况都可能是8字节。

这不准确。int的大小在不同的系统之间可能有所不同。这是系统的“自然字号”。所以在32位系统中通常是32位,但在64位系统中是64位(在旧系统中int有时是16位)。指针的大小通常是int的大小。

在C中,
int
具有
sizeof(int)
字节。同样,指向int的指针具有
sizeof(int*)
字节。实际大小取决于主机环境和所使用的编译器

同样,您的结构具有
sizeof(struct myCar)
字节,至少与其元素之和相同。但是,由于对齐问题,结构实际上可能更大

因此,不要对数据类型的大小做任何假设(除了
char
,它保证为一个字节)。而是在适当的地方使用sizeof


另一方面,在检查

中的
CHAR\u BIT
之前,您也不知道单个字节的大小。在64位系统上,
int
的大小不一定是64位的-Visual Studio仍然将其作为32位。+1@DeadMG,与64位OS X上的clang和gcc相同。@MByD,指针和
int
的大小也没有理由相同。@DeadMG-你当然是对的。此外,uint32的大小不一定是32位:)->在x86-64上,int是32位,因为AMD认为这是“自然字长”,是导致平均程序最小机器代码的选择。int的大小也取决于编译器。此外,结构上的填充可能会将其强制为其他值。的可能重复项