當前位置:首頁 » 服務存儲 » 實參和形參共同佔用一段存儲空間
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

實參和形參共同佔用一段存儲空間

發布時間: 2022-09-20 18:52:04

c語言的形參是否占存儲單元

C。

函數的形參是函數定義時由用戶定義的形式上的變數,實參是函數調用時,主調函數;被調函數提供的原始數據。

形參變數只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。函數調用結束返回主調函數後則不能再使用該形參變數。實參和其所對應的形參分別佔用不同的存儲單元,彼此之間不影響。

(1)實參和形參共同佔用一段存儲空間擴展閱讀:

形參和實參的特點

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

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

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

4、在一般傳值調用的機制中只能把實參傳送給形參,而不能把形參的值反向地傳送給實參。因此在函數調用過程中,形參值發生改變,而實參中的值不會變化。而在引用調用的機制當中是將實參引用的地址傳遞給了形參,所以任何發生在形參上的改變實際上也發生在實參變數上。

網路-形參

② 在C語言中,函數的形參和實參可以占同一個存儲單元,也可以占不同的存儲單元吧

形參只是實參的一個副本,即拷貝,它們不能公用存儲單元。

參數之間的傳遞分為數值傳遞與地址傳遞,如果是數值傳遞時,各自佔用不同的內存單元,如果是地址傳遞時,共用同一段內存單元。

函數調用時,主調函數把實參的值傳送給被調函數的形參從而實現主調函數向被調函數的數據傳送。 形參變數只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的回內存單元。

形參只是實參的一個副本,即拷貝,它們不能公用存儲單元,不佔相同的空間。

(2)實參和形參共同佔用一段存儲空間擴展閱讀:

函數調用過程

1、函數的形參列於函數聲明中,在函數定義的函數體內使用。在未出現函數調用時,形參不佔內存中的存儲單元;當函數調用時,形參(任何種類的)是一類將被填充的空白或是佔位符。

2、將實參的值傳遞給形參。當函數被調用時,實參列在函數名後面的括弧里。執行函數調用時,實參被傳遞給形參。

3、在執行函數期間,由於形參已經有值,可以利用其進行相關運算。

4、通過return語句將函數值帶回到主調函數。

5、調用結束,形參單元被釋放。實參單元仍保留並維持原值(值傳遞)。

③ c語言中形參和實參是否佔用一個存儲單元

形參只是實參的一個副本,即拷貝,它們不能公用存儲單元。
如果傳入的是指針,那麼形參就是實參的一個指針拷貝。此時,形參指針和實參指針指向同一塊內存區域,雖如此,但是,不能說它們本身占同一個存儲單元。

④ java中形參和實參是佔一個存儲位置還是占兩個

"執行方法的時候,如果是基本數據類型是分配棧里的內存
方法執行完,你的形參就消失了

如果是new出來的東西在堆里分配內存 "
不錯。
我可以補充一些:
一般地,對於一般的語言,形參是不會佔有內存分配的,它只是用來在實參傳入時匹配檢測罷了,而對於實參,它是程序或線程 中實際存在的,會分配內配的。這個實參會在棧(stack)中有一份存儲。但java對象的存在打破了這一個約定,java的對象是存在堆(heal)中的,當你new了一個對象實例時就會在堆中分配空間,同時一般的要運用這個對象會使用一個引用(或者你說是指針),而這個引用是放在棧中的,所以你上面所說的實參實際是用的那個引用,同時當你結束了方法調用時,這個引用也會消失,但是heal中實際存在的對象並不會立即消失,這一般的由gc來自動釋放。
你說的存儲位置我不大明白是什麼意義,只能分析一下具體的內存分配情況。

⑤ c語言形參和實參共占相同的存儲空間

無論是不是指針,形參實參都不是佔用相同的空間。不是指針時,形參和實參的值是相等的;當是指針時,形參和實參都指向同一個地址(其實也就是*p(形參)和*q(實參)的值是相等的),但絕不是相同存儲空間

⑥ 調用函數時,實參和形參可以共用內存單元嗎,為什麼

你對程序的理解就錯了。實參是你實際傳進函數的參數,而形參只表示實參在傳進函數之後的名字,不佔內存

⑦ 實參數組和形參數組在存儲空間上完全重合

只有當數組名作為函數的形參是,這個兩個數組就共占同一段內存單元,在存儲空間上完全重合。因為數組名實質上是常指針,即便它作為參數,它指向地址是不會改變的(傳參的時候實際上是臨時拷貝了一份指針,但是指向的地址不變),所以就共佔一段內存單元(指針指向的那塊內存)。

⑧ 數組名作為實參時,在調用函數時是把數組的首地址傳送給形參,因此實參數組與形參數組共佔一段內存單元

C語言中數組名作為實參傳給被調用的函數時,形參獲得的是數組的起始地址。還是用例子說話吧。#includeint*arry(int*a){int*b;b=a;inti;for(i=0;i<5;i++){printf("%d",a[i]);}returnb;}intmain(){inta[5]={1,2,3,4,5};int*c;inti;c=arry(a);for(i=0;i<5;i++){printf("%d",c[i]);}}主要是通過指針把數組,例如main裡面的a的地址傳入arry函數,然後在arry函數中用一個兼容類型的指針接收地址,然後就可以再這個指針下的地址操作地址上面的數據了。arry返回的時候也是返回一個指針(地址)。

⑨ 以下正確的說法是( )。在C語言中: A.實參和與其對應的形參各佔用獨立的存儲單元

在C語言中實參和與其對應的形參共佔用一個存儲單元。

C語言是一門面向過程、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲器。

C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。盡管C語言提供了許多低級處理的功能,但仍然保持著跨平台的特性,以一個標准規格寫出的C語言程序可在包括一些類似嵌入式處理器以及超級計算機等作業平台的許多計算機平台上進行編譯。

(9)實參和形參共同佔用一段存儲空間擴展閱讀

基本特性

1、高級語言:它是把高級語言的基本結構和語句與低級語言的實用性結合起來的工作單元。

2、結構式語言:結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。

C 語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控製程序流向,從而使程序完全結構化。

3、代碼級別的跨平台:由於標準的存在,使得幾乎同樣的C代碼可用於多種操作系統,如Windows、DOS、UNIX等等;也適用於多種機型。C語言對編寫需要進行硬體操作的場合,優於其它高級語言。

4、使用指針:可以直接進行靠近硬體的操作,但是C的指針操作不做保護,也給它帶來了很多不安全的因素。C++在這方面做了改進,在保留了指針操作的同時又增強了安全性,受到了一些用戶的支持,但是,由於這些改進增加語言的復雜度,也為另一部分所詬病。

Java則吸取了C++的教訓,取消了指針操作,也取消了C++改進中一些備受爭議的地方,在安全性和適合性方面均取得良好的效果,但其本身解釋在虛擬機中運行,運行效率低於C++/C。一般而言,C,C++,java被視為同一系的語言,它們長期占據著程序使用榜的前三名。

參考資料來源:網路-c語言