第九章 指針
第三節 變量的指針和指向變量的指針變量-2
1. 指針變量作爲函數參數
-
函數的參數可以是指針類型,作用是將一個變量的地址傳遞到一個函數中去
-
c語言中,實參變量個形參變量之間數據傳遞是單向的值傳遞,指針變量作爲函數參數也要遵循這個原則
-
例子1
#include <iostream>
void swap(int *pdest1, int *pdest2) {//兩個指針變量作爲形參
//pdest1指向p1, pdest2指向p2
//調用swap函數不能改變實參指針變量的值,p1還是指向a,p2還是指向b,
//但是可以改變實參指針變量p1,p2指向的變量,也就是a,b的值
int temp;
temp = *pdest1;//temp = a;
*pdest1 = *pdest2;//a = b;
*pdest2 = temp;// b = a;
//指針調換沒有達到目的,只是修改指向的變量,變量a和變量b並沒有改變
//退出這個函數後,這三個變量銷燬,也就是說swap函數沒有意義
// 調用swap沒有改變p1始終指向變量a,p2始終指向b
// int *ptemp;
// ptemp = pdest1;//ptemp指向a
// pdest1 = pdest2;//pdest1指向b
// pdest2 = ptemp;//pdest2指向a
}
int main() {
int a = 5, b = 6;
int *p1, *p2;
p1 = &a;
p2 = &b;
printf("a = %d, b= %d\n", a, b);
if (a < b) {
swap(p1, p2);//兩個指針變量作爲實參
}
printf("a = %d, b= %d\n", a, b);
return 0;
}
- 例子2
#include <iostream>
int main() {
int *p;//定義整型指針
//*p代表指針變量p所指向的變量,但p到底指向誰呢,並不確定
//所以*p可能會造成某個內存被無意修改了,從而使系統崩潰
// *p = 5;
// 正確用法,p指向了一段有效的內存,所以可以對它指向的內存進行賦值
int a;
p = &a;
*p = 5;
printf("a = %d\n", a);
return 0;
}