示例**如下:
#include #include int main()
/* * 在此函式中實現指標變數的值的交換
*/int swap(int *p1, int *p2)
上述**執行結果如下:
please input a and b: 11 33
before swap: a=11, b=33
after swap: a=33, b=11
通過以上**及執行結果,能夠得出:
1)指標作為函式引數時,是將乙個變數的位址傳送到另乙個函式中。
3)函式swap的作用是交換兩個變數(a和b)的值,其實現方法是通過交換指標變數所指向的值(*p1和*p2),而並非交換指標變數的值(p1和p2)。這是因為:函式引數傳遞的方式是「單向傳送」的「值傳遞」方式(指標變數作為函式引數也是遵循這一規則),形參值(p1和p2)的改變不能使實參的值(pointer_1和pointer_2)隨之改變,即,受「單向值傳遞」約束的只是指標變數(pointer_1和pointer_2),而指標變數(pointer_1和pointer_2)所指向的值(a和b)並不受約束,故可以通過函式傳參進行改變。
4)函式的呼叫可以(而且只可以)得到乙個返回值(即函式值),而運用指標變數作為函式引數,可以得到多個變化了的值。
5)對於swap函式的實現,下面有乙個錯誤的示例:
/*
* swap函式的錯誤示例 *
*/int swap_error(int *p1, int *p2)
上述**在編譯時不會報錯,但執行時會直接導致程式崩潰。原因在於,*p1(即a)是整型變數,而*tmp是指標變數tmp所指向的變數,但tmp中並無確定的值(它的值是不可預見的),因此tmp所指向的單元也是不可預見的。所以,對*tmp賦值有可能給乙個儲存著重要資料的儲存單元賦值,這樣就會破壞系統的正常工作。所以,應該將*p1的值賦給乙個整型變數,如前面的正確示例中的tmp一樣,用整型變數tmp作為臨時輔助變數來實現*p1和*p2的交換。
備註:這裡尚未知道是否有方法能夠通過修改此錯誤**,來實現*p1和*p2的交換目的,待後續補全。
指標變數作為函式引數
函式的引數可以是指標型別,它的作用是將乙個變數的 位址傳送到另乙個函式中。指標變數作為函式引數與變數本身作函式引數不同,變數作函式引數傳遞的是具體值,而指標作函式引數傳遞的是記憶體的位址。用指標變數作函式引數,在被調函式的執行過程中,應使指標變數所指向的引數值發生變化,這樣,函式在呼叫結束後,其變化...
指標變數作為函式引數
先描述乙個題目,題目是這樣的,輸入a和b兩個整數,按先大後小的順序輸出a和b。note your choice is c ide include stdio.h void main p1就是a,是整型變數。而 temp是指標變數temp所指向的變數。但temp中並無確定的值 它的值是不可預見的 因此...
指標變數作為函式引數
先描述乙個題目,題目是這樣的,輸入a和b兩個整數,按先大後小的順序輸出a和b。note your choice is c ide include stdio.h void main void swap int p1,int p2 int a,b int pointer 1,pointer 2 sca...