指標作為函式引數指標可以作為函式的引數。
在函式章節中,我們把數字作為引數傳入函式中,實際上就 是利用了傳遞指標(即傳遞陣列的首位址)的方法。通過首位址,我們可以訪問陣列中的任 何乙個元素。 對於指向其他型別變數的指標,我們可以用同樣的方式處理。
例如,我們編寫如下乙個函式,用於將兩個整型變數的值交換。
void swap(int *x,int *y)
這時,我們在其他函式中可以使用這個函式:
int a=5,b=3;
swap(&a,&b);
printf(「a=%d,b=%d」,a,b); //輸出:a=3,b=5
在這個過程中,我們先將 a 和 b 的位址傳給函式,然後在函式中通過位址得到變數 a 和 b 的值,並且對它們進行修改。當退出函式時,a 和 b 的值就已經交換了。
這裡有一點值得我們注意。看如下這個過程:
void swap(int x,int y)
我們呼叫了 swap(a,b);然而這個函式沒有起作用,沒有將 a 和 b 的值互換。 為什麼呢?因為這裡在傳入變數 a 和 b 的時候,是將 a 的值賦值給函式中的形參 x,將 b 賦值給形參 y。這裡接下來的操作就完全與 a 和 b 無關了,函式將變數 x 和 y 的值互換, 然後退出函式。這裡沒有像上面例子那樣傳入指標,所以無法對傳進來的變數進行修改。
將指標傳入函式與將變數傳入函式的區別在於:前者是通過指標來使用或修改傳入的變數;而後者是將傳入的變數的值賦給新的變數,函式對新的變數進行操作。
同理,對 scanf()函式而言,讀取變數的時候我們要在變數之前加&運算子,即將指標傳入函式。這是由於 scanf()函式通過指標將讀取的值返回給引用的變數,沒有&,就無法 進行正常的讀取操作。
【例 9】編寫乙個函式,將三個整型變數排序,並將三者中的最小值賦給第乙個變數,次小值賦給第二個變數,最大值賦給第三個變數。
#includeusing namespace std;
void swap(int *x,int *y)
void sort(int *x,int *y,int *z)
int main()
輸入:2 3 1
輸出:1 2 3
函式返回指標
int *a(int a,int b)
a 是函式名,呼叫它後得到乙個指向整型資料的指標(位址)。x 和 y 是函式 a 的形參, 為整型。
注意:在*a 的兩側沒有括號;在 a 的兩側分別為*運算子和()運算子,由於()的優 先級高於*,因此 a 先於()結合。在函式前面有乙個*,表示此函式是返回指標型別的函式。 最前面的 int 表示返回的指標指向整型變數。對初學 c++語言的人來說,這種定義形式可能 不太習慣,容易弄錯,用時要十分小心。
【例 10】編寫乙個函式,用於在乙個包含 n 個整數的陣列中找到第乙個質數,若有則返回 函式的位址;否則返回 null(空指標)。
#include#includeusing namespace std;
int n,a[10001];
bool isprime(int n)//判斷素數
return true;
}int* find()
int main()
輸入:
71 6 9 2 3 4 5
輸出:(可能是)4214864
2函式指標和函式指標陣列
乙個指標變數通過指向不同的整數變數的位址,就可以對其他的變數操作。
程式中不僅資料是存放在記憶體空間中,**也同樣存放在記憶體空間裡。具體講,c++的 函式也儲存在記憶體中,函式的入口位址也同樣可以用指標訪問。
另一方面,有些函式在編寫時對要呼叫的輔助函式尚未確定,在執行時才能根據情況為其傳遞輔助函式的位址。比如 sort 函式的呼叫:「sort(a,a+n,cmp);」其中的比較函式 cmp 是我們根據需要轉給 sort 的(也可能是 cmp1,cmp2 等),其實就是傳遞了函式指標。 下面我們來看乙個具體例子。
【例 11】使用函式指標呼叫函式示例。
#includeusing namespace std;
int t(int a)
int main()
typedef int (*lp)(int,int);//定義了乙個函式指標變數型別lp
int main()
void t2()
void t3()
void t4()
void t5()
typedef void(*lp)();//定義了乙個函式指標變數
int main()
;//定義了乙個lp型別的函式指標陣列a,並初始化
int x;
cin>>x;
a[x]();//使用a[x]()來呼叫選擇的函式
return 0;
}
輸入:2
輸出:test3
C 指標的學習 3 指標與函式
1.函式指標 函式的指標 位址 乙個函式在編譯時被分配給乙個入口位址,這個入口位址就稱為函式的指標。在c 中可定義乙個指標變數,用它指向函式,然後通過改指標呼叫此函式。這種變數稱為函式指標變數,簡稱函式指標。定義格式如下 資料型別 函式指標名 引數型別表 注意括號的位置!區別於指標函式的定義。注意 ...
C語言(九) 指標(3)指標與const
表示一旦得到了某個變數的位址,不能再指向其他變數 int i 0 int const q i q是 const q 20 ok q error表示不能通過指標去修改這個變數 int i 0 int j const int p i const int p 等同於 int const p p 20 er...
5 指標與函式
c語言中值傳遞的本質是,當呼叫被調函式時,被調函式會在自己的函式棧中開闢相同型別的形參空間,並且將傳遞過來的值寫入形參空間儲存。傳遞位址和普通傳參沒有本質的區別。傳遞位址和普通傳參都是值傳遞,實參是數值,也可以是變數。數值沒有普通值傳遞,因為普通值傳遞需要的形參空間大,效率低,所以只有位址傳遞。四種...