(1)内置类型
sizeof(char*) = 4;
sizeof(int) = sizeof(long) = sizeof(float)= 4;
sizeof(枚举) = 4;
sizeof(double) = 8;
sizeof(false) = sizeof(true) = sizeof(char) = 1;
(2)typedef struct ST
{
char* d1;
long d2;
char d4[0];
} TT;
sizeof(TT) = ;
结果 8 , 对于取结构体大小,主要为变量对应的内置类型中字节最大的值的整数倍。
意思是说:sizeof(char*) = 4;sizeof(long) = 4;sizeof(d4[0]) = 0; 结果为4的整数倍及8。
注: char d4[0]; 比较特殊,它的大小应该为0,但是它只能放在结构体的最后,且不能单独使用。
及:
{char d4[0];} 或 {char d4[0]; long i;} 均是编译不过的。
此外
typedef struct ST2
{
char* d1;
short int d2;
char d4[10];
char t1;
} TT2;
sizeof(TT2) = 18;按上面的理论结果是不成立的 。此时就是各个变量大小相加,奇数个char是看成偶数,
及:4+2+10+2;
(3)char t[] = {123456789};
sizeof(t) = 10;
strlen(t) = 9;
sizeof(&(t[0])) = 4;
strlen(&t[0]) = 9;
strlen(&t[1]) = 8;
根据上面的答案比较好理解了。