细说c语言中的sizeof运算符
来源:互联网 发布:ubuntu启动项修改 编辑:程序博客网 时间:2024/06/05 18:06
细说c语言sizeof运算符
-于哈尔滨的一个地下室旅店,2011-9-11下午
所有开始奔波找工作的毕业生们,加油。
1. sizeof是什么?宏定义?函数?
sizeof即不是宏定义,也不是函数,那么好吧,他是什么?答曰”运算符“。
2. 应用场景
在设计计算对象大小的代码中,推荐使用sizeof去去得对象(基础类型,struct,union等)的大小。
3. 易错点
char* ss = "0123456789";sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针sizeof(*ss) 结果 1 ===》*ss是第一个字符char ss[] = "0123456789";sizeof(ss) 结果 11 ===》ss是数组,计算到\0位置,因此是10+1sizeof(*ss) 结果 1 ===》*ss是第一个字符char ss[100] = "0123456789";sizeof(ss) 结果是100 ===》ss表示在内存中的大小 100×1strlen(ss) 结果是10 ===》strlen是个函数内部实现是用一个循环计算到\0为止之前int ss[100] = "0123456789";sizeof(ss) 结果 400 ===》ss表示再内存中的大小 100×4strlen(ss) 错误 ===》strlen的参数只能是char* 且必须是以''\0''结尾的char q[]="abc";char p[]="a\n";sizeof(q),sizeof(p),strlen(q),strlen(p);结果是 4 3 3 2
class X{int i;int j;char k;};X x;cout<<sizeof(X)<<endl; 结果 12 ===》内存补齐cout<<sizeof(x)<<endl; 结果 12 同上
char szPath[MAX_PATH] 如果在函数内这样定义,那么sizeof(szPath)将会是MAX_PATH,但是将szPath作为虚参声明时(void fun(char szPath[MAX_PATH])),sizeof(szPath)却会是4(指针大小)
4. 如果自己实现该怎么写?
如果面试官突然想要你自己写一个sizeof函数的话,如何实现?这里是一个简单版本。
#include <stdio.h>#define my_sizeof(L_Value) ( \ (char *)(&L_Value + 1) - (char *)&L_Value \)#include <stdio.h>#include <stdio.h>int main(void){ int i; double f; double a[4]; double *p; printf("%d\n", my_sizeof(i)); printf("%d\n", my_sizeof(f)); printf("%d\n", my_sizeof(a)); printf("%d\n", my_sizeof(p)); printf("%d\n", my_sizeof("abdegh")); return 0;}
- 细说c语言中的sizeof运算符
- C语言中的sizeof运算符
- 关于C语言中的Sizeof()运算符
- C语言sizeof()运算符
- C语言 sizeof 运算符
- C语言sizeof运算符
- C 语言 sizeof() 运算符
- c语言之sizeof运算符
- C/C++中的sizeof运算符
- C语言中的sizeof
- C语言中的sizeof
- c语言中的sizeof()
- C语言中的sizeof
- C语言中的sizeof
- C语言中的sizeof()
- 4. 28 C语言 数据类型,运算符 , sizeof
- 黑马程序员------C语言中sizeof运算符的使用
- C语言中,sizeof运算符的作用
- The STL Vector Class
- 84个SEO面试问题
- 需要注意的几个编程习惯
- LINQ Element Opreator
- flex 自定义类as 调用类 静态方法 flex 教程 flex培训 flex源码 flex实例
- 细说c语言中的sizeof运算符
- 在Turnkey Redmine虚拟机上配置Git和Gitolite
- 一个简单的linux线程池
- 几天下来对于SSH的理解
- [笔试面试] 对x&(x-1)的理解
- JSF的生命周期
- 针对ubuntu中中文文件名乱码的解决
- Ext Js 数据传输与存储(三):
- mysql-front中文乱码问题的解决方案