/*
sizeof可以计算
1.变量
2.数组
3.结构体、联合等
4.字符串
*/
#include <stdio.h>
//结构体
struct Student//36(40)
{
//姓名
char name[23];//23*1 = 23+1=24 36+1+3=36+4=40
//性别
char sex;//1+3
//年龄
int age;//4 1 1 1 1 1 0 0 0
//成绩
double score;//8
};
struct NewStudent//36--->48
{
char sex;//1 000 0000+7=8
double score;//8
char name[23];//23+1=24
int age;//4 0000+4=8
};
int main(int argc, const char * argv[])
{
//1.计算一个变量的所占内存字节数
int a = 100;
int len = sizeof(a);
printf("len = %d\n",len);//计算一个变量
//2.sizeof一个类型
printf("int = %ld\n",sizeof(int));
printf("short int = %ld\n",sizeof(short));
printf("long int = %ld\n",sizeof(long));
printf("int * =%ld\n",sizeof(int *));//64位系统 8字节
//3.sizeof一个数组
int arr[10] = {0};
printf("len_arr = %ld\n",sizeof(arr));
//计算某一个数组元素的大小
printf("len_arr[0] = %ld\n",sizeof(arr[0]));
//求数组元素个数
int brr[] = {0,1,2,3,4,5,6,7,8,9};
int num = sizeof(brr)/sizeof(brr[0]);
printf("数组元素个数=%d\n",num);
//4.sizeof 结构体
printf("sizeof_student = %ld\n",sizeof(struct Student));
/*
是因为编译器使用内存时,进行了优化。
内存字节数的对齐和补齐
如果一个变量的长度 在64位 是 8字节或是它整数倍我们就说这个变量的长度正好能够对齐。
如果一个变量的长度 不足8或8的倍数,那么差多少补多少个0,直到能够对齐为止。
*/
printf("sizeof_newStudent = %ld\n",sizeof(struct NewStudent));
/*
记住:结构体的成员变量排列的顺序不同,结果往往也可能不相同。
*/
return 0;
}
|
|