指標變數作為函式引數示例及簡析

2021-08-15 02:51:30 字數 1157 閱讀 2986

示例**如下:

#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...