天天看點

4.2 函數調用與參數傳遞選講

本節的函數将更加複雜有趣,如傳回多個值,或者擁有交換兩個變量的功能

錯誤的代碼示範:(筆者認為這邊的了解應該在學完指針後了解會更加了解為什麼會産生這個錯誤)

點選檢視代碼

這個程式一看是三變量交換算法,但是這裡的程式測試後并不會交換a,b的值,在這裡原作的作者是這樣解釋的

a = a + 1;這邊先計算指派符号右邊的a+1然後把它裝入變量a,覆寫原來的值

1.先計算參數的值因為a = 3, b = 4,是以swap(a, b)等價于swap(3, 4)這裡的3和4被稱為實際參數(簡稱為實參)

2.把實參指派給函數聲明中的a和b。注意,這裡的a和b與調用時的a和b是完全不同的。前面已經說過,實參最後将算出具體的值,swap函數知道調用他的參數是3和4(也就是說實參會先将前面的計算的式子全部計算出來後,然後将計算出來的值傳送給調用的函數,此時該函數接收到的參數被稱為形式參數)實參最後算出具體的值,swap函數知道調用它的參數是3和4,卻不知道是怎麼算出來的。函數聲明中的a和b稱為形式參數(簡稱形參)

3.這樣一來,程式裡有個變量a,一個在main函數裡面定義,一個是swap的形參,二者不會混淆,因為函數(包括main函數)的形參和在該函數裡定義的變量都被稱為該函數的局部變量。不同函數的局部變量互相獨立,即無法通路其他函數的局部變量。需要注意的是局部變量的存儲空間是臨時配置設定的,函數執行完畢時,局部變量的空間将被釋放,其中的值無法保留到下次使用。與此對應的是全局變量,此變量在函數外聲明,可以在任何時候,由任何函數通路。需要注意的是,應該謹慎使用全局變量。也就是在函數中定義的變量是局部變量,不在函數中定義的變量是全局變量

4.函數的形參和在函數内聲明的變量都是該函數的局部變量。無法通路其他函數的局部變量(應該是無法直接通路該局部變量,通過指針的傳遞還是可以通路該變量),局部變量的存儲空間是臨時配置設定的,在函數執行完畢時,局部變量的空間将被釋放,其中的值無法保留到下次使用。在函數外聲明的變量是全局變量,可以被任何函數使用。操作全局變量有風險,應謹慎使用。

5.執行完畢後,函數會将傳回值傳回給調用他的函數,然後再次修改目前代碼行,恢複到調用他的地方繼續執行,那麼系統是如何實作這樣子的操作呢?下面會給出解釋

學術讨論環節