C語言提高 第6講 引數傳遞方式 傳值與傳位址

2021-08-09 05:20:48 字數 1352 閱讀 1648

任務和**:

/* 

*檔名稱:main.c

完成日期:2017.10.11

*版本號:v2.

* *問題描述:認真分析下面的**,掌握函式引數傳遞中

指標,位址,值的變化規律

*/

#includevoid fun(int *a, int *b, int *c)

int main()

執行結果:

分析過程:

p1=&a; 指標p1指向a=5這個值的位址   經過函式fun(p1,p2,p3)的內部運算,得到變數a,b,c的值

函式的引數傳遞是按址傳遞的,位址裡面的值發生變化才能傳遞到主函式中

子函式 fun()經過第一次交換,使得值為a的位址a變成了位址b,值為b的位址b變成了位址a       

可見,子函式中位址的交換不能改變主函式中對應的位址值

由於b=temp;即b與temp代表了同乙個位址,同乙個位址裡面的值當然一樣,故*temp=*b;多餘

*b=*c;是一條賦值語句,即將位址c中的值賦值給位址b

而位址c中的值就是p3指向的值c(3),由於值為b的位址b變成了位址a

故位址a也即p1指向的變數a=3

*c=*temp;也即*b=*temp;故也是多餘的

再將變數c的值賦值給變數a,此時變數a的位址是位址b。

(即函式傳參是按址傳遞並通過改變所指向位址中的變數值進行的)

#includevoid exchange(int *,int *,int *);  

void myswap(int *,int *);

int main( )

void exchange(int *q1,int *q2,int *q3)

void myswap(int *pt1, int *pt2)

C語言提高 第5講 函式的引數 回文 素數

任務和 檔名稱 main.c 完成日期 2017.10.10 版本號 v2.問題描述 編制乙個函式reverse,返回給定資料的 反序數 問題輸出 例如輸入1234,輸出4321。請編制reverse函式,實現要求的功能。include int reverse int int main int re...

C語言中引數的傳遞方式

c語言中引數的傳遞方式一般存在兩種方式 一種是通過棧的形式傳遞,另一種是通過暫存器的方式傳遞的。這次,我們只是詳細描述一下第一種引數傳遞方式,另外一種方式在這裡不做詳細介紹。首先,我們看一下,下面乙個簡單的呼叫例程 int add int a,int b,int c void main 借助以上例程...

C語言中函式引數傳遞的方式 值傳遞,位址傳遞

值傳遞 將實參的值複製至形參的相應儲存單元中,實參與形參占用不同儲存單元,單向傳遞 即指向實參的儲存單元,形參和實參占用相同的儲存單元 引用傳遞 c 中主要內容 1 c語言中位址傳遞實參的方法 2 多函式巢狀傳遞實參的方法,二維指標 3 陣列作為函式引數,而不改變陣列的值,可以複製陣列內容再進行修改...