网站开发流程传智播客,2019个人建设网站,南昌网站推广排名,搜狗网站排名软件定义
sizeof是C语言的一种单目操作符。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。
使用方法
用于数据类型
sizeof(type) 数据类型必须用括号括住
用于变量
size…定义
sizeof是C语言的一种单目操作符。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。
使用方法
用于数据类型
sizeof(type) 数据类型必须用括号括住
用于变量
sizeof var_name 变量名可以不用括号括住但是一般习惯于用括号括住
注意
sizeof操作符不能用于函数类型不完全类型或位字段。不完全类型指具有未知存储大小的数据类型如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。sizeof(void)都不是正确形式。
字节长度
数据类型所占用字节数与机器字长与编译器有关遵循的几条规律如下
sizeof(short int )sizeof(int)sizeof(int)sizeof(long int)short int 至少应为16位2个字节long in 至少应为32位4个字节
常见字长 16位编译器char *(指针变量)2个字节寻址空间为216,所以为两个字节32位编译器char *(指针变量)4个字节64位编译器char *(指针变量)8个字节
常见结果
数组
数组所占的内存字节数,包括空字符\0
int a[3]; sizeof(a)3*412
char a1[] abc; sizeof(a1)4,包括空字符
结构体
结构体的字节数由于考虑到字节对齐因此不仅仅是结构体内部数据的字节数之和这么简单。
字节对齐的细节和编译器实现相关但一般而言满足三个准则
1)结构体变量的首地址能够被其最宽基本类型成员的大小所整除
2)结构体每个成员相对于结构体首地址的偏移量offset都是成员大小的整数倍如有需要编译器会在成员之间加上填充字节internal padding
3)结构体的总大小为结构体最宽基本类型成员大小的整数倍如有需要编译器会在最末一个成员之后加上填充字节trailing padding。
#includestdio.h struct A { int a; //art 0 end 3 double b[100]; //original starting position 4 aligned starting position 8 end 101*8-1 char c[3]; //original starting position 101*8 end 101*82 _Bool v; //original starting position 101*83 end 101*831/8 //final action align the length of struct,so that 填充字节使其成为最宽基本类型成员大小的整数倍 }a; int main() { struct A a1; printf(%d\n, sizeof a1); while (getchar() ! \n); getchar(); return 0; } 运行结果816102*8
指针
指针是来存放地址的那么它当然等于计算机内部地址总线的宽度。在32位计算机中一个指针变量的返回值必定是4个字节。指针变量的sizeof值与指针所指的对象没有任何关系。
联合体
结构体在内存组织上市顺序式的联合体则是重叠式各成员共享一段内存所以整个联合体的sizeof也就是每个成员sizeof的最大值。
函数
sizeof也可对一个函数调用求值其结果是函数返回值类型的大小函数并不会被调用。
对函数求值的形式
sizeof(函数名(实参表))
注意
1不可以对返回值类型为空的函数求值。
2不可以对函数名求值。
3对有参数的函数在用sizeof时须写上实参表。