sizeof(b)
會給你在struct tB
類型的變量,在這種情況下將是4字節的大小(由於padding
它不會是3,因爲它預期是)
sizeof(*p)
將再次給你struct tB
類型的變量的字節數。您應該struct tB
type.Eg的變量的地址初始化p
:
struct tB *p=&b;
但是你應該知道,在這種情況下,如果你使用sizeof(p)
噸如果它會給出指針p
的大小,而不是p
指向的變量。試試你的程序的這種變化:
#include<stdio.h>
struct tB
{
unsigned b1:3;
signed b2:6;
unsigned b3:11;
signed b4:1;
unsigned b5:13;
} b;
int main(void)
{
struct tB *p;
printf("%d\n%d",sizeof(*p),sizeof(p));
}
這裏是另一個變化是輪struct tB
24位(3個字節),你期望的那樣,通過處理使用#pragma pack()
指令填充,這是依賴於編譯器(大小我在Windows上使用CodeBlocks)。
#include<stdio.h>
#pragma pack(1)
struct tB
{
unsigned b1:3;
signed b2:6;
unsigned b3:11;
signed b4:1;
} b;
int main(void)
{
struct tB *p;
printf("%d\n%d",sizeof(*p),sizeof(p));
}
謝謝!即時通訊不知道第二個聲明是說什麼? – RightLeftRight12 2013-04-30 06:03:05
@ user2127663讓我編輯並清除。 – 2013-04-30 06:03:35
好的,如果我只是要求sizeof(p),它會給我4,因爲它的指針是正確的? – RightLeftRight12 2013-04-30 06:05:20