sizeof函式與表示式操作無關

2021-09-01 04:31:25 字數 1048 閱讀 5944

引子:

在32位作業系統中,如下程式輸出結果?

#include "stdio.h"

int main()

輸出結果為i=3,j=4

彙編**:

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 個數可變的位置引數 定義函式時,可能無法事先確定傳遞的位置實參的個數時,使用可變...