當前位置:首頁 » 服務存儲 » 形參未被調用就不存在存儲空間
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

形參未被調用就不存在存儲空間

發布時間: 2022-01-16 07:57:51

1. 形參分配存儲空間嗎

不分配是說形參本身不分配,他只是一個名字,標號。分配,說的是發生函數調用的時候分配。
就像錢本身有價值嗎? 但是當大家同意用它流通就有「價值」了。

2. c++涵數的行參在未被調用之前不會分配空間,函數的形參的要和實參相

?那裡填「類型」——其實這題出得並不科學:「相同」自然好,但「兼容」也就可以了,比如實參是int型,而形參是double型,也是完全可以的。

3. C++ 下列關於形參程序代碼的問題

建議你看看有關書籍里講《標識符的作用域、生存期、可見性》方面的部分。

首先,變數傳參函數 void swap1(int x,int y) :當函數被調用的時候,系統為形參 x、y 開辟了存儲空間,並用主函數中實參 x、y 的值初始化形參 x、y(x、y 對於程序員名字一樣,但在內存里是不同的存儲單元)。然後,由於主函數被掛起,傳參函數便只能操作新的變數 x、y ,然而,在函數內部操作 x、y 是不會影響到原來主函數里的實參 x、y 的值的(存儲空間不同)。形參的值雖然交換過了,但因為不能保留下來,所以在程序里沒有任何意義。函數調用完畢之後,形參 x、y 被銷毀,分配的內存空間被釋放,回到主函數,輸出 x、y 的值就會是主函數中定義的 x、y 的值 5、6。

第二個,指針傳參函數 void swap2(int *x,int *y) :這里涉及指針的知識。執行 swap2(&x,&y) 時,把 x、y 的地址傳遞給指針變數 x、y (同理,名字一樣,但存儲單元不同,類型當然也可以不同)。函數里對形參 x、y 進行解引用(* 操作符),依地址找變數實際的存儲單元,直接操作變數。所以修改了主函數里定義的 x、y 的值,成功地實現了交換。輸出結果為 6、5。

最後,引用傳參函數 void swap3(int &x, int &y) :本來,用原變數初始化引用類型的新變數,相當於給原變數起別名。在這里也是這樣,不過新名字與原名字一樣,都是 x、y ,但是這新舊名字還是有區別的。在函數里只能操作定義的新名字變數,但是新名字變數是原實參的別名,所以在函數里操作 x、y 相當於直接操作主函數里的 x、y 。主函數里的 x、y 剛剛被指針傳參函數修改過,所以修改後值又恢復到原來定義時的樣子,輸出結果 5、6。

4. 形參只有在被調用時才分配存儲空間這句話對嗎。

對的

形參變數只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。函數調用結束返回主調函數後則不能再使用該形參變數。

5. 1.下面描述正確的是: a.函數的形參在函數未調用時預分配了存儲空間

a.函數的形參在函數未調用時預分配了存儲空間
錯誤,運行時分配,未調用時不分配。

b.若函數的定義出現在main函數之前,則可以不必再聲明
錯誤,函數需要在它被調用之前聲明,這個跟main()函數無關

c.若一個函數沒有return語句,則什麼值都不返回
語言不同結果不同,c/c++:函數聲明的時候已經聲明了它的返回值類型,比如int型.如果沒有返回值要聲明成void,如果一個int型的函數,沒有return語句,編譯的時候會報錯.別的語言比如說perl,cobol之類的.沒有return語句,那函數返回值是最後一條有意義語句的值,比如最後一條是$a = 1+1;則返回2.

d.一般來說,函數的形參和實參的類型應該一致
對,函數的實參個數和形參個數相等,實參與對應的形參類型一致。如果用表達式,表達式類型 應與對應形參 一致。

6. c++函數調用結束,形參單元被釋放.意思就是形參不佔存儲空間了

應該是這樣,包括函數里的臨時變數,除非你使用了new

7. C語言中形參在未調用時為什麼不佔內存

C語言的函數的形式參數是函數的局部變數,所以只在調用時創建,返回後消失。

8. 實參和形參都需要佔用存儲單元么

實參和形參各佔用獨立的存儲單元。

實參和形參是各占獨立存儲空間,函數調用過程中,實參向形參拷貝復制值。實參是個變數,形參也是個變數。

如果佔用同一片空間的話,編譯時候就不存在實參形參類型不匹配的報錯。參數傳遞中,形參值的改變不影響實參的值。


(8)形參未被調用就不存在存儲空間擴展閱讀

形參和實參的區別

1、形參變數只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。函數調用結束返回主調函數後則不能再使用該形參變數。

2、實參可以是常量、變數、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使實參獲得確定值。

3、實參和形參在數量上,類型上,順序上應嚴格一致,否則會發生「類型不匹配」的錯誤。

4、函數調用中發生的數據傳送是單向的。即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。因此在函數調用過程中,形參的值發生改變,而實參中的值不會變化。

9. 函數中的形參在什麼時候得到存儲空間

形參只是一個符號,不會分配具體的空間的..當函數被調用的時候,具體給出的參數,也就是實參,其實是一份拷貝..它的內存空間在該函數的堆中進行分配.比如 定義函數 int add(int ,int); 在主函數中 定義變數 int x, y..調用函數 add(x, y);那麼在函數add的堆中會分配出空間,來保存實參x y的拷貝..而主函數中的 x y 是在主函數的堆中保存的... 不曉得有沒有說明白..呵呵

10. 為什麼說形參只有被調用時才分配內存,從匯編角度如何理解

高級語言,一般用棧傳參,形參的生命周期是函數級。函數調用時,壓棧(分配空間)。

具體請參考C調用約定