編寫日期:2012.5.22
前言
c語言,是函式構成的語言,c離不開函式,函式對於c的存在有著決定性的作用。那麼,函式引數對於c的重要性也就可想而知了。
下面我就談談c函式引數的一些性質。
引數特性簡介
特點一:函式引數的傳遞順序。
例項一
void func
( int id1 , int id2 )
void main ( )
請問這輸出什麼?
執行結果:func()->id1=12,id2=11
怎麼會這樣呢?怎麼可能這樣呢?按照我們的思維方向——從左到右,應該是func()->id1=11,id2=12呀!怎麼會是反的呢?真奇怪!
冥思苦想吧,終於可又得出乙個結論:函式引數的傳遞順序是從右向左傳遞的。
例項二int func1 ( int id1 , int id2 )
int func2( int id1 , int id2 , int id3 , int id4 )
呼叫這兩個函式,請問它們分別輸出什麼?
func1 ()->&id1=0x12ff2c,&id2=0x12ff30
func2 ()->&id1=0x0x12ff24,&id2=0x12ff28,&id3==0x12ff2c,&id4=0x12ff30
這樣的結果意味著什麼呢?最後乙個引數的位址都是一樣,從後起往左走,一樣的步長(4個位元組)地減小。
這也就是說函式引數的首位址是隨著引數個數進行變化的,末位址是不變的,也就是末位址是確定的。
注:引數的末位址可能根據各種原因進行變化的,並非都為0x12ff30。
特點三:可變引數。
例項三
int func ( const char *format , … )
請問這樣的引數對嗎?如果對,有什麼理由這樣寫?
這樣的引數寫法是正確的,稱作可變引數。有了特點二的幫助,那麼這個問題就能很好地回答了。
如例項3所示的**,即函式引數在被呼叫的時候,引數首位址可以確定,引數個的步長可以確定,引數的個數可以確定,也即引數末位址可以確定了。
為什麼引數不寫成…,const char *format呢?我想在以上的解釋中,你應該明了啦。
c 函式特性
1.內斂函式在函式的宣告和定義前面都要加上關鍵字 inline 2.內聯函式是c 為提高程式執行速度所做的一項改進,與常規函式區別在於c 編譯器如何將它組合到程式中,所謂的的 內聯 是編譯器將使用相應的函式 來替換函式呼叫,程式無需跳轉到另乙個位置執行 再跳回來。所以速度比常規函式稍快,但是代價是需...
C 函式特性
1.函式引數預設值 比較兩個函式預設值的正確性 void fun int i,int j 5,int k 10 正確 void fun int i,int j 5,int k 錯誤 有函式引數值的引數必須在引數列表的最右端!2.使用時的一些注意事項 為了避免某些編譯器不通過,建議在宣告時給函式加預設...
C 函式特性
1 函式引數預設值 void fun int i,int j 2,int k 3 void fun int i,int j 2,int k 有預設引數值的引數必須在參數列的最右端 fun 10 實際傳入10 fun 10,20 實際傳入10,20,不是10,2 fun 10,20,30 實際傳入10...