关于sizeof输出问题
看下面一个例子:
int main()
{
char *ss1 = "0123456789";
char ss2[] = "0123456789";
char ss3[100] = "0123456789";
//内存对齐问题
struct { int a; char b; int c; char d; }st1;
struct { int a[10]; char b; char c; }st2;
printf("length1: %d;length2: %d; length3: %d, length4: %d, length5: %d\n",sizeof(ss1),sizeof(ss2), \
sizeof(ss3), sizeof(st1),sizeof(st2));
return 0;
}
结果为4,11,100,16,48.
因为ss1首先是一个指针变量,它指向一个字符串,而sizeof输出的是给它传递的变量的长度,因此结果是4;
而对ss2来说,它是一个数组,它的长度未定义,因此要根据字符串的长度来算,再加上一个结束'\0',因此是11;
对于ss3它是一个有固定长度100的字符串,因此输出100;
对于结构体变量st1,与st2来说,默认情况下,为了便于对结构体内元素的访问与管理,当结构体内的元素的长度都小于处理器的位数时,便以最长的元素为对齐单位,也就是说结构体的长度一定是最长的数据元素的整数倍,就是st1里,那么每个元素都占4字节;如果结构体内存在长度大于处理器位数的元素如数组a[12],它的长度为12*4=48,那么此时则用处理器的位数为对齐单位,也就是小于处理器的每个元素的长度为4,大于处理器位数的元素的长度为4的倍数。
来源:https://www.cnblogs.com/lingde27/archive/2010/10/13/1850589.html