本文目錄一覽:
C語言中,形參是實參的副本,這句話怎麼理解。。。能舉個例子最好
int main()
{
int a=1;
int b=2;
printf(“before :a=%d b=%d\n”,a,b);//交換之前a,b的值
change(a,b); //交換過程
printf(“after :a=%d b=%d\n”,a,b);
/*交換後a,b的值,沒有變換,沒錯,這意味著形式參數無法修改實際參數的值,只是起了一個備份的作用,就是把實參的值拷貝到了形參中,實際的參數沒有發生任何變換. 當形參是指針的時候,會改變實參的值*/
return 0;
}
void change(int x,int y)//這裡的形參x對應實參a的值,形參y對應實參b的值
{ //形參交換過程
int temp;
temp=x;
x=y;
y=temp;
printf(“change :x=%d y=%d\n”,x,y);//形參的值
}
運行結果:
before :a=1 b=2 //實參的值
change :x=2 y=1 //形參的值
after :a=1 b=2 //交換後沒有影響實參
需要指針的例子在找我要
不懂C語言中的指針與函數參數以及所謂副本是什麼意思
首先說swap(int a,intb)與main函數調用的sawp(a,b),首先討論變數的作用域,也就是變數的生存周期,main函數中的swap(a,b)中的a與b的作用域是整個main函數,而swap(int a,intb)中的a,b是swap的函數參數,作用域是swap函數,而main函數調用swap函數時會把main函數中的a與b的值傳遞給swap函數中的
a與b(所以把swap函數中的a與b稱作是副本,因為他們本身的值就是main函數的a b複製過來的),這裡兩對a與b僅僅是值相等(在內存里地址是不同的),我們在swap函數中操作a,b讓a與b交換,僅僅是讓swap函數中的a b交換了,而a,b出了swap函數就不起作用了,不能實現main函數中的交換,因為這裡用的是值傳遞的方式。
而要想讓main函數中的a,b值交換怎麼辦呢?這就需要swap函數中的兩點參數的內存地址與main函數中的相同。而C語言中存儲地址的數據類型是指針,所以把swap函數中的參數換成指針就好了,也就是swap(int*a,int*b),這裡的a,b都是指針變數,用來保存兩個整型數字的內存地址,而main函數中需要調用swap函數把main函數的a,b的地址傳過來,也就是swap(a,b)這裡的是取地址符,這樣swap函數就得到了對應的兩個地址,由於這樣*a(這裡的*代表解引用)與main函數中的a 具有了一樣的地位,操作*a與main函數中操作a是一樣的,因為內存地址是一樣的,*b也一樣。這樣就可以完成在swap函數中交換*a與*b後,就實現了main函數中的a,b交換。
C語言中主調函數的臨時副本
void fun(int i);
假設有參數int a = 5;
調用fun的時候類似 fun(i = a);是這樣調用的 把a的值賦給i 你修改i的值 改不了a.
原創文章,作者:LJAEQ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/315953.html