该文章只是用来记忆,如果有错误,希望大神们能够告知小弟进行改正。
sizeof是c/c++中判断类型长度符的操作符,而不是函数。
默认sizeof是在编译期执行的,但是在C99标准中规定,sizeof也可以在运行时刻进行计算,所以sizeof能够正确计算动态数组的长度。
一. 基本类型的sizeof()
对于基本类型,sizeof都将等于其基本类型的长度
sizeof(int); //值为4
sizeof(double); //值为8
sizeof(10); //值为4
sizeof(8.8); //值为8
二. 数组类型的sizeof()
(1) 对于静态数组类型,sizeof都将等于其定义时的长度
int a[3];
sizeof(a); //值为3
(2) 对于动态数组类型,sizeof都将等于其定义时的长度(此时sizeof在运行时刻进行计算)
int n;
scanf("%d", &n);
char a[n];
sizeof(a); //值为输入的n的值
三. 指针类型的sizeof()
对于指针类型,sizeof都将等于计算机内部地址总线的长度,32位机器将等于4
char *p;
sizeof(p); //值为4
四.结构体类型的sizeof()
字节对齐的三个原则:
(1) 结构体成员的首地址能够被其最长基本类型成员的大小整除。
(2) 结构体每个成员相对于结构体首地址的偏移量,都是这个成员大小的整数倍,如有需要编译器会自动为这个成员进行填充。
(3) 结构体的总大小为结构体最长基本类型成员的大小的整数倍,如有需要将在最后一个成员后进行填充。
根据进行字节对齐后的结构体计算出sizeof的值
struct s1{
char a;
int b;
}
sizeof(s1); //值为8, char类型向最长基本类型成员int对齐