引子:
在32位作業系統中,如下程式輸出結果?
#include "stdio.h"輸出結果為i=3,j=4int main()
彙編**:
1: #include "stdio.h"
2:3: int main()
4:
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也可以對乙個函式呼叫求值,其結果是函式返回型別的大小,函式並不會被呼叫。
**:
函式與lambda表示式
lambda表示式是python中一類特殊的定義函式的形式,使用它可以定義乙個匿名函式。與其它語言不同,python的lambda表示式的函式體只能有單獨的一條語句,也就是返回值表示式語句。其語法如下 lambda 形參列表 函式返回值表示式語句 常規函式 def comp x return x a...
函式與Lambda表示式
def myfirstfunction name 函式定義過程中name是形參 因為ta只是乙個形式,表示佔據乙個引數位置 print 傳遞進來的叫做實參,因為ta是具體的引數值!format name myfirstfunction 老馬的程式人生 傳遞進來的老馬的程式人生叫做實參,因為ta是具體...
函式與Lambda表示式
學習人員 賈其豪 函式定義預設值引數 函式定義時,給形參設定預設值,只有與預設值不符的時候才需要傳遞實參 deffun a,b 10 b稱為預設值引數 print a,b 函式的呼叫 fun 100 fun 20,30 個數可變的位置引數 定義函式時,可能無法事先確定傳遞的位置實參的個數時,使用可變...