什么情況下形參可以改變實(shí)參 形參不能改變實(shí)參,為什么在用指針傳遞數(shù)值的時(shí)候又可以改變呢?
形參不能改變實(shí)參,為什么在用指針傳遞數(shù)值的時(shí)候又可以改變呢?事實(shí)上,一個(gè)形式參數(shù)在傳遞一個(gè)實(shí)際參數(shù)給一個(gè)子函數(shù)時(shí)定義了一個(gè)新的變量,但是這個(gè)變量的值等于實(shí)際參數(shù)所以不管你在子函數(shù)中如何修改它,調(diào)用它的
形參不能改變實(shí)參,為什么在用指針傳遞數(shù)值的時(shí)候又可以改變呢?
事實(shí)上,一個(gè)形式參數(shù)在傳遞一個(gè)實(shí)際參數(shù)給一個(gè)子函數(shù)時(shí)定義了一個(gè)新的變量,但是這個(gè)變量的值等于實(shí)際參數(shù)
所以不管你在子函數(shù)中如何修改它,調(diào)用它的函數(shù)的實(shí)際參數(shù)的值將不受影響
當(dāng)使用指針作為參數(shù)時(shí),因?yàn)槲覀儌鬟f的不是值本身,而是相應(yīng)的地址。更改值時(shí),我們會(huì)更改該地址中的值,因此可以通過(guò)傳遞指針來(lái)更改值
如果要修改在子函數(shù)中調(diào)用它的函數(shù)的值,可以使用引用函數(shù)
例如
#include<stdio。H>
void fun(int&x)
x=x1
void Main()
{
int a=5
fun(a)
printf(%d,a)
}]是在參數(shù)前面加上一個(gè)&
例如,定義INTF(intb),其中B是一個(gè)形式參數(shù)。當(dāng)我們調(diào)用F時(shí),我們寫(xiě)F(a),其中a是一個(gè)局部變量。當(dāng)我們調(diào)用F時(shí),它被稱(chēng)為實(shí)際參數(shù)。在f(a)之后,函數(shù)f中參數(shù)B的值由a給出,因此將實(shí)際參數(shù)的值傳遞給形式參數(shù)是正確的。形式參數(shù)的值不能傳遞給實(shí)際參數(shù)B=1000對(duì)參數(shù)a沒(méi)有影響。但是,如果函數(shù)定義是指針,則函數(shù)可以更改存儲(chǔ)在指針上的內(nèi)容,但不能更改指針本身。從這個(gè)角度看,一個(gè)實(shí)際參數(shù)可以通過(guò)一個(gè)形式參數(shù)來(lái)改變
一個(gè)實(shí)際參數(shù)是一個(gè)在程序中分配了內(nèi)存空間的參數(shù)??梢越o它一個(gè)特定的值,例如常量、數(shù)組、地址(指針)、變量名、數(shù)組名或表達(dá)式。當(dāng)然,它還包括一個(gè)指針變量。R參數(shù)是在編寫(xiě)被調(diào)用函數(shù)時(shí)定義的,目的是指定所用自變量的類(lèi)型和要執(zhí)行的操作。在調(diào)用函數(shù)之前,它不會(huì)被分配內(nèi)存空間或給定特定的值。當(dāng)R調(diào)用一個(gè)函數(shù)時(shí),形式參數(shù)將被分配一個(gè)新的內(nèi)存空間,實(shí)際參數(shù)的值將被“復(fù)制”進(jìn)來(lái),允許它參與被調(diào)用函數(shù)中的操作。參數(shù)本身不參與此操作,它只起傳遞值的作用(但在C中可以使用&更改參數(shù)的值)。如果參數(shù)是指針形式,則復(fù)制地址。讓我們舉一個(gè)非常簡(jiǎn)單的例子:output func1=6,B=5,參數(shù)B的值不變。右