首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

sizeof函数与表达式操作无干

2012-09-08 
sizeof函数与表达式操作无关????引子:在32位操作系统中,如下程序输出结果??0040104A ? call ? ? ? ?printf

sizeof函数与表达式操作无关

?

?

?

?

引子:

在32位操作系统中,如下程序输出结果?

?

0040104A ? call ? ? ? ?printf (00401080)

0040104F ? add ? ? ? ? esp,0Ch

9: ? ? ? ?return 0;

00401052 ? xor ? ? ? ? eax,eax

10: ? }

00401054 ? pop ? ? ? ? edi

00401055 ? pop ? ? ? ? esi

00401056 ? pop ? ? ? ? ebx

00401057 ? add ? ? ? ? esp,48h

0040105A ? cmp ? ? ? ? ebp,esp

0040105C ? call ? ? ? ?__chkesp (00401100)

00401061 ? mov ? ? ? ? esp,ebp

00401063 ? pop ? ? ? ? ebp

00401064 ? ret

?

?

?

指点:

从如下汇编代码可以看出,j = sizeof(++i+ ++i);这条语句的汇编代码仅仅只有一条,即将4赋值给j变量,可见sizeof()内的表达式操作++i+ ++i并未执行。

7: ? ? ? ?j = sizeof(++i+ ++i);

00401036 ? mov ? ? ? ? dword ptr [ebp-8],4

?

?

解惑:

实际上,sizeof计算对象的大小也是转换成对对象类型的计算,也就是说,同种类型的不同对象其sizeof值都是一致的。这里,对象可以进一步延伸至表达式,即sizeof可以对一个表达式求值,编译器根据表达式的最终结果类型来确定大小,一般不会对表达式进行计算。如:

sizeof( 2 ); // 2的类型为int,所以等价于 sizeof( int );

sizeof( 2 + 3.14 ); // 3.14的类型为double,2也会被提升成double类型,所以等价于 sizeof( double );

sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用。

【摘自:百度百科 词条sizeof】

网址:http://baike.baidu.com/view/1078660.htm

?

?

热点排行