关于sizeof
来源:互联网 发布:2015十大网络神曲 编辑:程序博客网 时间:2024/05/17 20:34
最近在看林锐博士的高质量c/c++编程指南,在书的后面附了一张测试的卷子,做了一下,发现自己很多都是处于半懂半不懂得阶段,比如下面这道关于sizeof的题目:
1、void Func ( char str[100])
{
请计算
sizeof( str ) = 4 (2 分)
}
2、char str[100 ] = {0} ;
char *p = str ;
int n = 10;
请计算
sizeof (str ) = 100 (2 分)
sizeof ( p ) = 4 (2 分)
sizeof ( n ) = 4 (2 分)
3、void *p = malloc( 100 );
请计算
sizeof ( p ) = 4 (2 分)
其实大部分还是很好理解的,但是对于1、和2中的第一小问我刚开始被纳闷到了,同样都是对数组的首地址取sizeof,怎么会两者截然不同,开始我还怀疑林锐博士的书出错了,自己编了个小程序果然如此,在网上查了一下资料,得到结果如下:
Char str[100];
sizeof是个编译器常量,当程序执行到这里的时候,编译器在编译阶段己经知道他的长度了,会把它的长度记录, sizeof是C中的一个操作符,是语言层面的功能,这个计算结果是在编译时完成的,就是说编译器看到这个语句,它就会用100这个常数去替换,因此 生成的的汇编代码里有它的长度!
当数组名作为参数传递时,会退化为指同类型的指针! 也就是说此事在1、中的str已经只是一个地址了,所以当然是4了,这也是为什么我们传递数组的时候除了给他首地址还要给它数组的大小的缘故。
- 关于sizeof
- 关于sizeof
- 关于sizeof
- 关于sizeof
- 关于sizeof()
- 关于sizeof
- 关于sizeof
- 关于sizeof
- 关于sizeof
- 关于sizeof
- 关于sizeof
- 关于sizeof
- 关于sizeof
- 关于sizeof
- 关于sizeof
- 关于sizeof
- 关于sizeof
- 关于sizeof
- 简洁 DIV+CSS布局入门之二 ( DIV+CSS常用 常用CSS DIV+CSS实例 简单DIV+CSS DIV+CSS布局分析 DIV+CSS流程)
- strace 参数说明
- 使用OpenCV实现运动背景的重建
- Spring In Action (2) -- IoC
- wmic的文件使用详解
- 关于sizeof
- 用WinInet远程下载文件的示例代码
- using flex Webservice component in flash cs4
- Head First C# 中文版 图文皆译 第八章 枚举和集合 page384
- 简洁 DIV+CSS布局入门之三 ( DIV+CSS常用 常用CSS DIV+CSS实例 简单DIV+CSS DIV+CSS布局分析 DIV+CSS流程)
- 监视回放
- Oracle数据库绑定变量特性及应用
- 软件开发过程中的文档目录
- 自己动手做QQ特洛伊-文件绑定篇【二】