如果表達式是變量或常量,可以省略括號。否則帶括號和不帶括號的結果是不壹樣的。返回為表達式分配的字節數。
在這個例子中,s是壹個字符數組,sizeof(s)返回6,這意味著為幾個組分配了6個字節。妳的理解是正確的。
在sizeof(s+2)中,s+2的結果是壹個無符號的long long int,sizeof返回為存儲這種類型的整數而分配的字節數,在您的系統中是8。
也就是說sizeof(表達式)返回的值與表達式結果的類型有關,sizeof本身返回的值的類型是無符號long int。
例如:
假設在壹個系統上,int是4字節,long int是4字節,long long int是8字節,float是4字節,double是8字節。那麽sizeof(1)返回4,sizeof(1L)返回8,sizeof(1LL)返回8。同時,sizeof(1+2)返回4,sizeof(1.0+2)返回8,sizeof(1.0F+2)返回4。
下面是壹個綜合的例子:
# include & ltstdio.h & gt
int main()
{
int a = 1;
結構ss
{
int I;
char s[8];
} s 1;
typedef ss s;
printf("%lu ",sizeof a);
printf("%lu ",sizeof 1);
printf("%lu ",sizeof(a+1));
printf("%lu ",sizeof a+1);
printf("%lu ",sizeof(1+2));
printf("%lu ",sizeof 1+2);
printf("%lu ",sizeof(1));
printf("%lu ",sizeof s 1);
printf("%lu\n ",sizeof(s));
printf("%lu ",sizeof((short)1));
printf("%lu ",sizeof(1L));
printf("%lu ",sizeof 1LL);
printf("%lu ",sizeof 1.0);
printf("%lu ",sizeof(1.0F));
printf("%lu ",sizeof 1.0d);
printf("%lu ",sizeof(1.0+2));
printf("%lu ",sizeof(1.0F+2));
printf("%lu\n ",sizeof(1.0d+2));
返回0;
}