-
大意:
用函數實現變量的值的交換,用到指針! - 思路:
該函數要實現變量的值的交換,形參需爲兩變量的地址。
1)若不是地址,形參是兩個變量,那麼傳進去的是兩個單純的數值,數值在函數內部做了交換,即函數內的兩個局部變量(形參)進行了數值交換,交換後的效果並沒有影響到函數外的實參(調用該函數相當於只是給函數提供了兩個數值)。
2)若傳給形參的是實參的地址(即指針),那在函數內部通過解引用該指針,可以找到實參的數值,此時再進行交換則交換的是存在實參地址上的數值。交換後的值依然在a和b的地址存放,只不過原來存在a那的數現在存在了b那,存在b那的數現在存在了a那。
(ps:a,b的地址是用十六進制表示的,轉成十進制和p,q的值相同)
- 參考代碼:
#include<stdio.h> #include<stdlib.h>
void swap(int* p, int* q) {
int tmp=0;
tmp = *p;
*p = *q;
*q = tmp;
//printf("指針p的值:%d \n指針p的值:%d\n", p, q);
}
int main() {
int a = 10;
int b = 20;
printf("a=%d b=%d\n", a, b);
//printf("a的地址:%p\nb的地址:%p\n", &a, &b);
swap(&a,&b);
printf("a=%d b=%d\n", a, b);
system("pause");
return 0;
}