Ⅰ 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關鍵字時,表示變數已經在別處定義,所以不能在此處初始化。
網路-形式參數
網路-存儲類
Ⅱ C語言中,形參的預設的存儲類型說明是( ) A auto (自動)Bstatic( 靜態) Cregister(寄存器)
應該是A auto的,形式參數的值是放在堆棧上面的,當不同的實參進來時,會有相應的入棧和出棧的操作,所以形式參數的值是一直在變化的。故是自動的
Ⅲ C語言中實參和形參分別存放在內存的什麼位置
形參只是一個符號,不會分配具體的空間的..當函數被調用的時候,具體給出的參數,也就是實參,其實是一份拷貝..它的內存空間在該函數的堆中進行分配.比如 定義函數 int add(int ,int); 在主函數中 定義變數 int x, y..調用函數 add(x, y);那麼在函數add的堆中會分配出空間,來保存實參x y的拷貝..而主函數中的 x y 是在主函數的堆中保存的... 不曉得有沒有說明白..呵呵
Ⅳ c語言中形參的預設存儲類別是
c語言中形參或者說所有的變數,預設的存儲類別都是auto的。C語言中四種存儲類別:auto、static、extern、register 。
其中大部分均為auto,auto為默認的類別,一般未標明的都是auto;如果標明了哪種類別,那就按標明的來。
(4)形參的存儲空間用什麼表示擴展閱讀:
形參的作用是實現主調函數與被調函數之間的聯系,通常將函數所處理的數據,影響函數功能的因素或者函數處理的結果作為形參。
沒有形參的函數在形參表的位置應該寫int main(void) 函數也可以有形參和返回值,其形參也稱為命令行參數,由操作系統在啟動程序時初始化,其返回值傳遞給操作系統。
形參的特點:
1、形參變數只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只在函數內部有效。函數調用結束返回主調用函數後則不能再使用該形參變數。
2、實參可以是常量、變數、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值。
3、實參和形參在數量上,類型上、順序上應嚴格一致,否則就會發生類型不匹配的錯誤。
4、在一般傳值調用的機制中只能把實參傳送給形參,而不能把形參的值反向地傳送給實參。因此在函數調用過程中,形參值發生改變,而實參中的值不會變化。而在引用調用的機制當中是將實參引用的地址傳遞給了形參,所以任何發生在形參上的改變實際上也發生在實參變數上。
Ⅳ 在c語言中形參的預設存儲類是
形參的類型是不能省略的。
我估計你是想說函數返回值存儲類型吧! 函數的存儲類型就是函數定義時函數名前面的數據類型前面的存儲類型,預設時應該是:extern ,表示該函數屬外部函數(即可以被本C文件外的其他C源程序文件中的函數調用)。
Ⅵ 一道VB題計算題
'其實你用F8逐行調試,然後隨時看各個字母當時的值,就知道原因了。
'有一個很重要的原因,只要是函數內沒有定義x和y的,都是用全局變數的值,只有sub1里自己有定義y,用的是函數內的值。
'另一個重要原因是PrivateSubsub1(ByValmAsInteger,nAsInteger)中的ByVal,ByVal按值傳遞(a),意思是傳入的形式參數改變了,但是不影響實際參數的數值,默認是地址傳遞
DimxAsInteger,yAsInteger
PrivateSubCommand1_Click()
DimaAsInteger,bAsInteger
a=5
b=3
Callsub1(a,b)'Callsub1(5,3)
Printa,b'a因為是ByVal按值傳遞的,所以沒變,b是默認的,所以隨著n=2
Printx,y
EndSub
PrivateSubsub1(ByValmAsInteger,nAsInteger)『m=5,n=3
DimyAsInteger
x=m+n'x=5+3=8
y=m-n'y=5-3=2
m=fun1(x,y)'fun1函數會用到兩次,我們用A和B表示,A:fun1(8,2)得出:m=18
n=fun1(y,x)'經過fun1函數後,x=10,y不變,還是用函數內的值y=2,那麼B:fun1(2,10)得出:n=2
EndSub
PrivateFunctionfun1(aAsInteger,bAsInteger)AsInteger'A:fun1(8,2)B:fun1(2,10)
x=a+b'A:x=8+2=10,這時候a因為代入的是x(全局變數)的值,所以也a=10,b不變,b=2同理,B:x=2+10=12,b=12,a=2
y=a-b'A:y=10-2=8同理,B:y=2-12=-10
Printx,y'A:列印108B:列印12-10
fun1=x+y'A:fun1=10+8=18B:fun1=12+(-10)=2
EndFunction
Ⅶ java中形參和實參是佔一個存儲位置還是占兩個
"執行方法的時候,如果是基本數據類型是分配棧里的內存
方法執行完,你的形參就消失了
如果是new出來的東西在堆里分配內存 "
不錯。
我可以補充一些:
一般地,對於一般的語言,形參是不會佔有內存分配的,它只是用來在實參傳入時匹配檢測罷了,而對於實參,它是程序或線程 中實際存在的,會分配內配的。這個實參會在棧(stack)中有一份存儲。但java對象的存在打破了這一個約定,java的對象是存在堆(heal)中的,當你new了一個對象實例時就會在堆中分配空間,同時一般的要運用這個對象會使用一個引用(或者你說是指針),而這個引用是放在棧中的,所以你上面所說的實參實際是用的那個引用,同時當你結束了方法調用時,這個引用也會消失,但是heal中實際存在的對象並不會立即消失,這一般的由gc來自動釋放。
你說的存儲位置我不大明白是什麼意義,只能分析一下具體的內存分配情況。