我們首先舉例出3個函數,看看這三個函數的輸出有什么不同
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
//void huhuan(int ,int);
//void huhuan_1(int ,int );
//void huhuan_2(int ,int );
void huhuan(int a,int b)
{
int t;
t=a;
a=b;
b=t;
}
void huhuan_1(int p,int q)
{
int t;
t=p;
p=q;
q=t;
}
void huhuan_2(int p,int q)
{
int t;
t=p;
p=q;
*q=t;
}
int main()
{
int a=5;
int b=2;
//huhuan(a,b);
//huhuan_1(&a,&b);
//huhuan_2(&a,&b);
printf("%d,%d\n",a,b);
system("pause");
return 0;
}
事實上,只有jiao_huan2函數才可以實現兩個數的交換,這是為什么呢?
【1】執行huhuan(a,b);時,不能互換a和b的值,是因為執行互換函數時,只是互換了形參的值,函數執行結束時,對實參沒做任何改變。
【2】執行huhuan_1(&a,&b);時,不能互換a和b的值,是因為對于指針變量來說,改變地址的值并不改變指針所指向的內容的值。
【3】執行huhuan_2(&a,&b);時,能互換a和b的值,是因為將a,b的地址分別傳遞給了p和q,執行互換函數時,將a和b的原地址對應的內容互換了。
注意:指針就是地址;指針變量就是存放地址的變量;改變地址的值并不改變該地址對應的內容的值。
這里我也明白了函數需要對變量進行修改時,必須傳入指針,然后利用指針間接訪問變量,再對變量進行修改,這里也必須對函數實參和形參傳遞理解清楚。
而我們在用函數的時候,當要修改內存的值 需要傳內存地址的時候,我們就需要傳入指針來達到目的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。