C語言中,函式呼叫時,若是傳地址,行參與實參分配在同一地址嗎

時間 2021-05-07 20:00:40

1樓:安心播音

通俗一點,c語言中,函式呼叫的時候,如果有引數,則無論引數是什麼,都要為引數申請新的空間。

如:int fun(int* p);

,它被呼叫的時候,新申請一個指標 p 。即使你呼叫的時候這樣:

int a = 5; fun(&a);

它也會新申請一個指標變數 p 來存放 a 的地址,直到函式返回,該指標 p 的空間才會被釋放。

說白了,指標也是變數,只不過它的值是地址,而已!

2樓:匿名使用者

是地址呼叫的話,系統不另分配記憶體的。

傳遞的是指標和地址。。

你所說的行參和實參分配在同一地址??

感覺你理解就有點錯誤哦。應該分配的是記憶體,我們在c語言裡都是描寫記憶體分配情況的。

記憶體以單元來記算。

3樓:小昊

如果傳的值為地址的話,那麼函式對地址進行操作,修改的就是實參的值不會有給形參分配地址,所以是同一地址

4樓:

更準確的理解是函式建立一個指向同一地址的指標,從而實現對實參和行參的同步操作。

5樓:匿名使用者

不是的1、實參在定義時就開闢儲存單元,這個儲存單元地址在整個程式中是固定不變的;

2、只有在函式呼叫時才給形參開闢儲存空間,如果是值傳遞,則將實參的值賦給形參,如果是地址傳遞,則為形參開闢一個臨時指標變數,然後把實參的地址傳送給形參

3、函式執行完畢返回主程式時,釋放形參所佔的儲存單元。

6樓:匿名使用者

多看看書吧,上面講的挺詳細的。

7樓:豆豆寶寶我愛你

看行參和實參是什麼了.有指標的話,指標是一個地址,但他儲存的是樹組的首地址.若都是陣列.就為一個地址

在c語言中,用陣列名作為函式呼叫時的實參,實際上傳遞給形參的是____________。

8樓:足壇風行者

首地址。

因為陣列名傳遞的是陣列的地址也就是第一個元素的地址。例如:

a[3]這個陣列,3指個數,a[0]指第一個元素,全部元素指a[0]~a[2];那陣列名a規定的就是首地址。

擴充套件資料

c語言中函式引數傳遞的三種方式:

1、傳值,就是把你的變數的值傳遞給函式的形式引數,實際就是用變數的值來新生成一個形式引數,因而在函式裡對形參的改變不會影響到函式外的變數的值。

2、傳地址,就是傳變數的地址賦給函式裡形式引數的指標,使指標指向真實的變數的地址,因為對指標所指地址的內容的改變能反映到函式外,也就是能改變函式外的變數的值。

3、傳引用,實際是通過指標來實現的,能達到使用的效果如傳址,可是使用方式如傳值。說幾點建議:如果傳值的話,會生成新的物件,花費時間和空間,而在退出函式的時候,又會銷燬該物件,花費時間和空間。

9樓:匿名使用者

實引數組的首地復址。

在用數制組名作函式引數時,不是進行值的傳送,即不是把實引數組的每一個元素的值都賦予形引數組的各個元素。因為實際上形引數組並不存在,編譯系統不為形引數組分配記憶體,陣列名就是陣列的首地址,函式得到一個函式值,即為該字元陣列的首地址。

因此在陣列名作函式引數時所進行的傳送只是地址的傳送,也就是說把實引數組的首地址賦予形引數組名。形引數組名取得該首地址之後,也就等於有了實在的陣列。實際上是形引數組和實引數組為同一陣列,共同擁有一段記憶體空間。

10樓:匿名使用者

陣列名傳遞的是陣列的地址也就是第一個元素的地址 所以選 d

11樓:天雨下凡

選擇d.實引數組的首地址

12樓:匿名使用者

d首地址

~~~~~~~~

13樓:yeara洛

d.實引數組的首地址

c語言規定,呼叫一個函式時,實參變數和形參變數之間的資料傳遞方式是什麼 5

14樓:四舍**入

函式只有兩種傳遞方式:

1、值傳遞,又稱單向傳遞,只能把實引數值傳給形參 ,形參最後的結果不影響實參(形參改變大小 ,實參大小不變)。

2、址傳遞,通過指標,把實參的地址給形參,形參的大小可以影響實參。

15樓:匿名使用者

看到很多都說是值傳遞,本人認為只能由使用者指定傳遞方式。

在c語言中,軌道引數傳遞方式有兩種(其實還有引用傳遞):值傳遞和地址傳遞,也就是說可以值傳遞,也可以地址傳遞。至於到底採取什麼傳遞方式應該得有使用者根據形參型別來指定了。

比如 函式 int f( int *p) 此處接收的只能是地址型別

在主函式中定義變數 a =3; 此時實參a的值為3,很明顯 如果這種採用值傳遞方式呼叫 f(a)肯定不合適,

正確的應該是地址傳遞方式呼叫 f(&a) ,也許有些會說,地址也是值。但c明確的規定,實參的值和實參的地址是有本質區別的

故本人認為 傳遞方式只能由使用者根據 形參來指定傳遞方式。

16樓:

函式只有兩種傳遞方式 一個是值傳遞 一個是址傳遞 址傳遞 是指傳的是地址 也就是說 是以陣列過指標作為引數傳遞 而值傳遞傳的是 數 可以是整形的 也可以是實行的

17樓:匿名使用者

資料傳遞是「值傳遞」,即單向傳遞,只由實參傳遞給形參,而不能由形參傳回來給實參。

18樓:匿名使用者

實參向形參的資料傳遞是「值傳遞」,單向傳遞,只由實參傳給形參,而不能由形參傳回給實參

在c語言中,當形參和實參都為指標時,在函式中傳遞的是地址嗎?

19樓:

是的,指標這玩意兒,就是專門和地址掛鉤的!

20樓:休和宜繁星

這程式是你寫的嗎?

要是你寫的話

你就看下面的三段話

就能找出。

1.比如你定義一個函式void

add(int

a,int

b),這裡的a和b就是形參。

2.當你進行函式呼叫的時候,add(1,

2),這裡的1和2就是實參。

3.形參就是沒有賦值的變數,實參就是有賦值的變數

c語言問題 函式中形參若為指標,則呼叫時對應位置上的實參不能是()

21樓:

不能是 簡單變數,因為 它不是地址。

語法規則而已。

形參若為指標,實參必須是 指標變數,或 陣列名,或 簡單變數的地址。

陣列名 就是陣列的首地址,是地址

簡單變數的地址 是地址

形參若為指標,實參是 指標變數,這是一一對應,天經地義。

關於c語言 在c中呼叫函式時,只能把實參的值傳遞給形參,形參的值不能傳給實參。這句話對嗎?為什麼?

22樓:娛樂小八卦啊

不對,在c語言中,傳值有地址傳值和引數傳值,引數傳值只能將實參傳值給形參,所以a選項正確。c語言中的外部變數是可以在函式之間傳遞資料的。

c語言中的自動變數是預設的變數,實際上是函式中的區域性變數,所以d選項正確。全域性變數一經定義都是需要分配記憶體單元,在程式執行過程中自始至終都會佔用固定的空間,在未知記憶體情況下,最好不要使用全域性變數。

函式呼叫時,值可以雙向傳遞,並沒有限制使用全域性變數還是區域性變數,需要根據程式的邏輯需要進行選擇。

擴充套件資料

c語言引數傳遞:

1、值傳遞

引數傳遞只把變數a的值傳遞給了變數p,此時變數a與變數p是值相同的兩個不同變數,在記憶體不同的兩個地址中,所以對變數p賦值只是修改了變數p的值,並不能修改變數a的值。總結一句話就是:值傳遞不傳遞變數本身,只傳遞變數的值。

2、引用傳遞

與值傳遞不同,func的引數是int &p,表示引用傳遞。如輸出所示,通過引用傳遞,變數a的地址與變數p是相同的,也就是說引用傳遞把a的地址傳給了變數p,所以對變數p進行賦值之後,變數a的值也改變了,因為變數a與變數p實際是同一個變數。

3、指標傳遞

指標傳遞,顧名思義,int *p表明p是一個指標變數,呼叫func(&a)是把變數a的記憶體地址傳遞過去賦值給指標變數p,此時指標變數p的值是變數a的記憶體地址,故可看到輸出p為efbfde2c(變數a的記憶體地址)。

*p是對指標p的值(即變數a的記憶體地址)進行取值,相當於*&a,所以對*p進行賦值也就改變了變數a的值。

23樓:紅色老趙

實參是全域性變數,而形參是區域性變數.並且它們存放的地址也不一樣.

24樓:

不對,除了樓上所說的指標和陣列傳遞,還有一種情況就是引數分為入口引數和出口引數,二者區別在於入口引數在呼叫前必須被賦值,而後者在呼叫後才知道它的值,故出口引數是將形參的值傳給實參。(當然,出口引數一般為指標或陣列之類的)

25樓:炎二公子

比如定義

int f(int b) 這裡的b就是形參在呼叫的時候

我們寫 f(a) 這裡的a是本地變數,呼叫f的時候叫做實參在f(a)後,函式f裡的形參b的值是a賦予的,所以實參的值傳遞給形參這句話是對的

形參的值不能傳給實參這句話在嚴格意義上來說也是對的,比如,你在函式f(int b)裡面寫 b= 1000; 對於實參a來說並沒有任何影響。

但是,如果你的函式定義是指標,那麼函式可以改變指標上儲存的內容,但是不能改變指標本身。如果從這點考慮的話,實參是可以通過形參給改變的

26樓:

不對,你仔細看下書就知道為什麼了

c語言中的函式呼叫

include int fun1 int x,int y,int z int fun2 int x,int y,int z int main void int fun1 int x,int y,int z int fun2 int x,int y,int z 你要使用,你寫的函式求出的值,那就要有個...

C語言中函式呼叫問題

如果一個函式要使用引數,它就必須定義接受引數值的變數。形式引數與實際引數 函式定義時填入的引數我們稱之為形式引數,簡稱形參,它們同函式內部的區域性變數作用相同。形參的定義是在函式名之後和函式開始的花括號之前。呼叫時填入的引數,我們稱之為實際引數,簡稱實參。必須確認所定義的形參與呼叫函式的實際引數型別...

c語言中,函式返回值怎麼用,c語言中呼叫函式如何返回多個值?

斑駁丶4129仉 一般用0表示函式執行正確,正常返回 用負數表示函式執行出錯,每個值可以提前定義,根據出錯的值進行出錯處理。誠心為您解答每一個問題!如您滿意請採納最佳!如有疑問請繼續追問!您的好評是我們前進的動力,相互幫助,一起進步! return後接一個值。在呼叫這個函式的函式裡面,呼叫它的時候希...