經(jīng)典的swap程序
#include<stdio.h>
void swap(int *p, int *q);
int main(void)
{
int a = 233, b = 10086;
swap(&a, &b);
printf("a=%d, b=%d", a, b);
return 0;
}
void swap(int *p, int *q)
{
int tmp;
//由于*p和*q是int類型,作為容器的tmp變量也要為int類型
tmp = *p;
*p = *q;
*q = tmp;
}
分析一下這個(gè)swap程序:
1 .在給swap
函數(shù)傳入?yún)?shù)的時(shí)候,必須要傳入要調(diào)換的兩個(gè)變量的地址。因?yàn)槿绻麄鞯氖亲兞康闹当绲埃词乖?code>swap函數(shù)內(nèi)成功調(diào)換了呻畸,但是當(dāng)程序返回main
函數(shù)的時(shí)候移盆,swap
函數(shù)里面的變量已經(jīng)不存在了,執(zhí)行下面的打印命令伤为,打印的依舊是原本的a, b
2 .swap
函數(shù)接受的是兩個(gè)int *
類型的變量咒循,當(dāng)程序?qū)?code>a, b的地址傳進(jìn)swap
函數(shù)內(nèi)的時(shí)候,實(shí)際上做的就是p = &a; q = &b;
此時(shí)p, q
已經(jīng)是兩個(gè)分別指向了a, b
的指針了绞愚,那么就可以通過*
運(yùn)算符來直接操作a, b
怎么通過被調(diào)函數(shù)去修改主函數(shù)內(nèi)普通變量的值叙甸?
1 .被調(diào)函數(shù)的實(shí)參要是該普通變量的地址
2 .被調(diào)函數(shù)的形參要是指針類型的變量
3 .在被調(diào)函數(shù)中,使用*p = 你要干的事
這種寫法位衩,可以直接操作主函數(shù)內(nèi)相關(guān)變量的值
*
運(yùn)算符是干嘛的:
1 .乘法運(yùn)算
2 .定義一個(gè)指針類型的變量(char *, int *
)
3 .取地址運(yùn)算符&
的逆運(yùn)算裆蒸。&
的效果是訪問某個(gè)普通變量的內(nèi)存地址,而*
的效果就是訪問那個(gè)被指針指著的普通變量的值