形參的存儲
A. 7、c語言中,形參的默認存儲類別為。 (A)auto (B) static (C)register (D)extern
C。
在函數內部或復合語句內定義變數時,如果沒有指定的存儲類型或使用了auto說明符,系統就認為所定義的變數具有自動類別。
形參即函數的自變數,其初值來源於函數的調用。只有在程序執行過程中調用了函數,形參才有可能得到具體的值,並參與運算求得函數值。形參表相當於變數說明,但應特別注意:此處只能使用類型標識符,而不能直接使用類型。
用auto(或省略)來區分說明的局部變數。當執行進入局部變數所在的塊時,在棧上為變數分配存儲,退出塊時,存儲單元被回收。具有自動存儲期的變數在進入聲明該變數的程序塊時被建立,它在該程序塊活動時存在,退出該程序塊時撤銷。在函數內部定義的變數成為局部變數。
(1)形參的存儲擴展閱讀:
1、register關鍵字提示編譯器把局部變數或函數的形參盡可能放入CPU的寄存器中,以便快速訪問。因此變數的位元組長度不應該超過寄存器的長度。不要用取地址符(&)去獲得此變數的內存地址。例如:
{
register int Miles;
}
2、static是全局變數的默認存儲類。例如:
static int Count;
int Road;
main()
{
printf("%d ", Count);
printf("%d ", Road);
}
Count與Road兩個變數都是默認的static存儲類。
3、extern存儲類是指全局變數可以被各個對象模塊訪問。使用extern關鍵字時,表示變數已經在別處定義,所以不能在此處初始化。
網路-形式參數
網路-存儲類
B. 實參和形參都需要佔用存儲單元么
實參和形參各佔用獨立的存儲單元。
實參和形參是各占獨立存儲空間,函數調用過程中,實參向形參拷貝復制值。實參是個變數,形參也是個變數。
如果佔用同一片空間的話,編譯時候就不存在實參形參類型不匹配的報錯。參數傳遞中,形參值的改變不影響實參的值。
(2)形參的存儲擴展閱讀
形參和實參的區別
1、形參變數只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。函數調用結束返回主調函數後則不能再使用該形參變數。
2、實參可以是常量、變數、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使實參獲得確定值。
3、實參和形參在數量上,類型上,順序上應嚴格一致,否則會發生「類型不匹配」的錯誤。
4、函數調用中發生的數據傳送是單向的。即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。因此在函數調用過程中,形參的值發生改變,而實參中的值不會變化。
C. C語言中,實參的隱含存儲類型是 形參的隱含存儲類型是 A、auto B、static C、extern D、register
答案都選A:上面幾位胡說霸道。
不是static 形參存儲類型只有兩種可能,一是auto類型,而是register類型。我給你細細解說
auto 就是堆棧存儲 而register的是cpu內部寄存器存儲
具體函數的形參採用那種存儲方法,這和函數的「調用規則(calling convention)」有關。
調用規則主要設計參數的傳遞,入棧順序,寄存器傳參,函數返回值的存儲和清棧者,調用規則主要有 cdecl stdcall thiscall fastcall等等。棧是函數調用必需的數據結構。你可以在函數聲明是註明函數的調用規則:如 int cdecl add (int a,int b) 。 注意函數有默認的調用規則,所以你再寫程序時,沒有必要註明調用規則。你此外還可以添加編譯選項修改調用規則。
cdecl : (c/c++語言默認的調用規則):堆棧傳參參數,因此是auto類型。
stdcall :有叫做pascal,WINAPI,這個調用規則出現在windows的API函數中。它也採用堆棧傳遞參數。
thiscall:類中的函數的調用方式:參數傳遞和編譯器有關 Windows VC中 this指針用ECX寄存器存儲,而unix gcc中 this用棧存儲。其他參數也是用棧存儲。
fastcall:用寄存器存儲部分參數加快函數調用,其他參數用棧存儲。
所以,沒有隱含的存儲類型,形參的存儲類型和調用規則有關。但是如果真要學究般的考慮這個問題,則答案選A,因為C語言函數的默認調用方式是cdecl,它的參數傳遞只採用了棧,因此是auto(答案A)
而實參的存儲類型可以是A,B,C,D四種,隱含的類型(也就是你在定義變數是,不指明存儲類型)是auto(答案A)
D. c語言中,函數的隱含存儲類別及形參的默認存儲類別分別是
c語言中,函數的隱含存儲類別是extern
形參的默認存儲類別是auto
E. java中形參和實參是佔一個存儲位置還是占兩個
"執行方法的時候,如果是基本數據類型是分配棧里的內存
方法執行完,你的形參就消失了
如果是new出來的東西在堆里分配內存 "
不錯。
我可以補充一些:
一般地,對於一般的語言,形參是不會佔有內存分配的,它只是用來在實參傳入時匹配檢測罷了,而對於實參,它是程序或線程 中實際存在的,會分配內配的。這個實參會在棧(stack)中有一份存儲。但java對象的存在打破了這一個約定,java的對象是存在堆(heal)中的,當你new了一個對象實例時就會在堆中分配空間,同時一般的要運用這個對象會使用一個引用(或者你說是指針),而這個引用是放在棧中的,所以你上面所說的實參實際是用的那個引用,同時當你結束了方法調用時,這個引用也會消失,但是heal中實際存在的對象並不會立即消失,這一般的由gc來自動釋放。
你說的存儲位置我不大明白是什麼意義,只能分析一下具體的內存分配情況。
F. C語言中實參和形參分別存放在內存的什麼位置
形參只是一個符號,不會分配具核宏體的空間的..當函數被調用的時候,具體給出的參數,也就是實參,其實是一份拷貝..它的內存空間在該函數的堆中進行分配.比如 定義函數 int add(int ,int); 在主函數中 定義改閉冊變數 int x, y..調用函數 add(x, y);那麼在函數add的堆中會分配出空間,來保存實參x y的拷貝態仿..而主函數中的 x y 是在主函數的堆中保存的... 不曉得有沒有說明白..呵呵
G. c語言的形參是否占存儲單元
C。
函數的形參是函數定義時由用戶定義的形式上的變數,實參是函數調用時,主調逗芹函數;被調函數提供的原始數據。
形參變數只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。函數調用結束返回主調函數後則不能再使用該形參變數。實參和其所對應的形參分別佔用不同的存儲單元,彼此之間不影響。
(7)形參的存儲擴展閱讀:
形參和實參的特點
1、形參變數只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只在函數內部有效。函數調用結束返回主調用函數後則不能再使用該形鋒派參變數。
2、實參可以是常量、變數、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值。
3、實參和形參在數量上,類型上、順序上應嚴格一致,否則就會發生類型不匹配的錯誤。
4、在一般傳值調用的機制中只能把實參傳送給形參,而不能把形參的值反向地傳送給實參。因此在函數調用過程中,形參值發生改變,而實參中的值不會變化。而在引用調用的機制當山基畢中是將實參引用的地址傳遞給了形參,所以任何發生在形參上的改變實際上也發生在實參變數上。
網路-形參
H. 在C語言中,函數的形參和實參可以占同一個存儲單元,也可以占不同的存儲單元吧
形參只是實參的一個副本,即拷貝,它們不能公用存儲單元。
參數之間的傳遞分為數值傳遞與地址傳遞,如果是數值傳遞時,各自佔用不同的內存單元,如果是地址傳遞時,共用同一段內存單元。
函數調用時,主調函數把實參的值傳送給被調函數的形參從而實現主調函數向被調函數的數據傳送。 形參變數只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的回內存單元。
形參只是實參的一個副本,即拷貝,它們不能公用存儲單元,不佔相同的空間。
(8)形參的存儲擴展閱讀:
函數調用過程
1、函數的形參列於函數聲明中,在函數定義的函數體內使用。在未出現函數調用時,形參不佔內存中的存儲單元;當函數調用時,形參(任何種類的)是一類將被填充的空白或是佔位符。
2、將實參的值傳遞給形參。當函數被調用時,實參列在函數名後面的括弧里。執行函數調用時,實參被傳遞給形參。
3、在執行函數期間,由於形參已經有值,可以利用其進行相關運算。
4、通過return語句將函數值帶回到主調函數。
5、調用結束,形參單元被釋放。實參單元仍保留並維持原值(值傳遞)。
I. c語言中形參的預設存儲類別是
c語言中形參或者說所有的變數,預設的存儲類別都是auto的。C語言中四種存儲類別:auto、static、extern、register 。
其中大部分均為auto,auto為默認的類別,一般未標明的都是auto;如果標明了哪種類別,那就按標明的來。
(9)形參的存儲擴展閱讀:
形參的作用是實現主調函數與被調函數之間的聯系,通常將函數所處理的數據,影響函數功能的因素或者函數處理的結果作為形參。
沒有形參的函數在形參表的位置應該寫int main(void) 函數也可以有形參和返回值,其形參也稱為命令行參數,由操作系統在啟動程序時初始化,其返回值傳遞給操作系統。
形參的特點:
1、形參變數只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只在函數內部有效。函數調用結束返回主調用函數後則不能再使用該形參變數。
2、實參可以是常量、變數、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值。
3、實參和形參在數量上,類型上、順序上應嚴格一致,否則就會發生類型不匹配的錯誤。
4、在一般傳值調用的機制中只能把實參傳送給形參,而不能把形參的值反向地傳送給實參。因此在函數調用過程中,形參值發生改變,而實參中的值不會變化。而在引用調用的機制當中是將實參引用的地址傳遞給了形參,所以任何發生在形參上的改變實際上也發生在實參變數上。