首页 > 代码库 > [Linux] sizeof 小记
[Linux] sizeof 小记
1. sizeof 是关键字,不是函数,所以不要以函数的眼光去看待它。
以下是正确的:
int i = 10; printf("%d\n", sizeof i); printf("%d\n", sizeof (int));
以下是错误的:
printf("%d\n", sizeof int);
2. sizeof 是在编译时期被执行,但在实现ISO C99的编译器中也可以在执行期中被执行。
所以下面的定义是正确的:
char array[sizeof(int) * 10];
3. 在32位的系统中,sizeof 任何类型的指针,其中都是4,因为指针的长度就是4byte。
4. 当sizeof的对象是数组名时,返回的是数组的实际长度。
举例:
char a[] = "abcde"; int b[3]; char (*c)[] = { "a", "b", "c" }; char *d[] = { "aaa", "bbb", "ccc" }; printf("%d\n", sizeof a); // 输出6,因为存在‘\0‘ printf("%d\n", sizeof b); // 输出3*4=12 printf("%d\n", sizeof c); // 输出8,这是一个数组指针,它的本质是一个指针,所以在64bit中,sizeof 指针=8 printf("%d\n", sizeof d); // 输出24,这是一个指针数组,它的本质是数组,里面存放了3个指针,所以=8*3=24 printf("%d\n", sizeof a / sizeof(char)); // 输出6,这是我们求取一个数组中有多少个元素的方式
5. 数组作为参数传递时,传递的是指针,此时的sizeof对象其实是指针:
void fun(char a[]){ printf("%d\n", sizeof a); // 输出8}
6. 各基本类型的sizeof,64位系统:
printf("%d\n", sizeof(char)); // 输出 1 printf("%d\n", sizeof(short)); // 输出 2 printf("%d\n", sizeof(int)); // 输出 4 printf("%d\n", sizeof(long)); // 输出 8 printf("%d\n", sizeof(float)); // 输出 4 printf("%d\n", sizeof(double)); // 输出 8 printf("%d\n", sizeof(unsigned char)); // 输出 1 printf("%d\n", sizeof(unsigned short)); // 输出 2 printf("%d\n", sizeof(unsigned int)); // 输出 4 printf("%d\n", sizeof(unsigned long)); // 输出 8
[Linux] sizeof 小记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。