當前位置:首頁 » 編程語言 » c語言參數默認
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言參數默認

發布時間: 2023-04-20 06:30:41

A. c語言中的未賦值參數是否默認為0

不確定。
但一般情況是,靜態變數(static)與全局變數都默認為0,局部變數值不確定(很多情況下不為0)。
你可以測試一下:
#include
<stdio.h>
int
a;
//全部變數
int
main()
{
static
int
b;
int
c;
printf("a
=
%d,
b
=
%d,
c
=
%d\n",
a,
b,
c);
return
0;
}
變數在定義時就將其初始化是比較完全的方法。很多軟體問題都是由於變數未初始化引起。

B. C語言中形參的默認存儲類別是

  • C語言中形參的默認存儲類別是(A)auto(B)static(C)register(D)extern

  • 解:

A.auto B.static C.register D.extern
A 的變數在堆棧里,自然是運行時
B 是靜態變數
C 是寄存器變數,使用的是cpu的寄存器
D 是全局變數

BD都是放在數據段中的,編譯的時候就已經確定了位置(有的編譯器對b和d的處理不一樣)

C. c語言中,函數的隱含存儲類別及形參的默認存儲類別分別是

c語言中,函數的隱含存儲類別是extern
形參的默認存儲類別是auto

D. C語言基礎知識

C語言具有簡潔緊湊,靈活方便,運算符豐富,數據類型豐富,表達方式靈活實用等特點,所以C語言程序設計更主動、靈活。很多人從C語言入門編程,下面整理了一些C語言基礎知識,希望對大家有所幫助!

1.C語言中,變數必須先聲明後使用,即一個程序塊(花括弧對)中所有臨時變數必須在第一條可執行語句之前全部聲明,而不能像C++那樣隨用隨聲明;

2.C語言中參數傳值傳遞形參,即為參數的拷貝,此與C++/JAVA相同,同時值得注意,ANSI C不支持引用,此與C++/JAVA有區別,那麼要對參數進行修改只能使用指針方式(指針傳值指針本身仍是形參,要修改指針本身那必須使用雙重指針);

3.C語言默認類型為int,即參數無類型或函數無返回值類型聲明,則認為是int(貌似一些編譯器不支持),同時不建議使用該特性;

4.無參數的函數聲明應當使用void表明,否則C語言按照老式聲明方法忽略參數類型檢查;

5.全局變數建議全大寫,局部變數建議全小寫,內部變數31個字元有效,外部變數不區分大小寫,僅6個字元有效,所以必須保持唯一性;

6.ANSI C是按照多位元組實現的,UNICODE是後來發展的,所以有char/WCHAR,與.NET中char直接是雙位元組有區別,在C#中導入dll時值得注意;

7.C語言支持枚舉,並且枚舉和int直接強制類型轉換即可,比.NET方便;

8.#define聲明宏定義直接在編譯時替換,不進行類型檢查,const聲明常量則可以進行類型檢查;

9.運算符的優先順序記憶比較麻煩,還是()可靠;

10.goto並不是一無是處,在不考慮程序可讀性的情況下可能獲得更高的效率;

11.函數實際也可以與特殊的類型相對應,那樣對於理解函數指針比較方便,函數為外部類型;

12.static用於全局變數和函數則限定該變數和函數的使用范圍僅為該源文件(從而無需考慮與其他源文件不得重名),用於函數內部變數則該變數的內存分配和回收不再同於普通臨時變數(調用函數生成,函數返回銷毀),而是一直存在於靜態變數區,從而可以保存一些狀態;

13.頭文件的作用體現在調用其他源文件時不需要再次寫函數定義,所以實現函數是不需要頭文件的,調用時才需要,可以採用富頭文件定義一大組介面,然後使用多個源文件分別實現;

14.寄存器變數使用register聲明,僅適用於使用頻率高的局部變數(含形參)(受限於底層硬體,不一定會被分配到寄存器,但是這么寫不影響效率);

15.全局變數和靜態變數默認初始化為全零且僅初始化一次,局部變數默認初始化為未定義且每次都會重新初始化;

16.遞歸調用的方法一般比較緊湊,但是每次調用會單獨維護調用的`堆棧,所以效率不是最高;

17.#include的作用體現於將一些內容避免重新寫一遍(主要是類型、函數和外部變數定義),所以實際上不一定為h文件;

18.表示一行尚未結束,對於定義長的字元串和define比較有用;

19.函數調用的執行順序不確定,所以對於a()+b()這樣函數中使用相同變數並且改變其值的需要藉助臨時變數處理,防止不同實現的調用順序不一致;

20.##用於宏定義中連接前後兩個部分,如cat(a, b) a ## b;

21.指針是C/C++的重要內容,當然也是雙面刃,用好了很方便而且高效,用不好那就造成程序不穩定;

22.使用va_list, va_start, va_arg, va_end來定義可變參數的函數,通過va_start函數中的第一個不變參數將va_list指向參數列表(函數調用的棧中),然後通過va_arg獲取每個參數並將va_list移動指定類型的長度,最後則通過va_end完成必要的回收工作,需要指出的是va_arg沒有結束邊界,所以比較有效的方式有兩種,一種對於參數類型一致,則可以第一個參數指出後續參數的總數,然後依次獲取,另一種對於不同類型的參數混用,則可以通過類型標識+參數配對的方式進行使用(第一個參數依然可以指定數量,當然也可以檢查標識),從而避免最後讀取無效的參數,對於可變參數僅支持int和double兩種類型(參數未限定類型,故按照舊式聲明理解)以及指針類型;

23.函數指針是用來在C語言中實現動態調用的比較有效的方式

24.結構體用作參數依然是拷貝為形參傳遞,這點與JAVA中全部對象都是類有區別(類的對象通過引用傳值,C#支持struct),所以對於大的結構體事宜使用指針傳遞,而對於小的結構體拷貝傳值效率並不低;

25.代碼中字元數組為靜態常量,對其操作無效,程序塊中數組的聲明是可以自動回收的,通過malloc/calloc分配的內存為堆內存,需要自行通過free回收;

E. C語言主函數main()里的三個默認數數

給你一篇文章!
我們經常用的main函數都是不帶參數的。因此main 後的括弧都是空括弧。實際上,main函數可以帶參數,這個參數可以認為是 main函數的形式參數。C語言規定main函數的參數只能有兩個, 習慣上這兩個參數寫為argc和argv。因此,main函數的函數頭可寫為: main (argc,argv)C語言還規定argc(第一個形參)必須是整型變數,argv( 第二個形參)必須是指向字元串的指針數組。加上形參說明後,main函數的函數頭應寫為: main (argc,argv) int argv; char *argv[]; 或寫成: main (int argc,char *argv[])

由於main函數不能被其它函數調用, 因此不可能在程序內部取得實際值。那麼,在何處把實參值賦予main函數的形參呢? 實際上,main函數的參數值是從操作系統命令行上獲得的。當我們要運行一個可執行文件時,在DOS提示符下鍵入文件名,再輸入實際參數即可把這些實參傳送到main的形參中去。 DOS提示符下命令行的一般形式為:

C:\>可執行文件名 參數 參數……;

但是應該特別注意的是,main 的兩個形參和命令行中的參數在位置上不是一一對應的。因為,main的形參只有二個,而命令行中的參數個數原則上未加限制。argc參數表示了命令行中參數的個數(注意:文件名本身也算一個參數),argc的值是在輸入命令行時由系統按實際參數的個數自動賦予的。例如有命令行為:

C:\>E6 24 BASIC dbase FORTRAN ,由於文件名E6 24本身也算一個參數,所以共有4個參數,因此argc取得的值為4。argv參數是字元串指針數組,其各元素值為命令行中各字元串(參數均按字元串處理)的首地址。 指針數組的長度即為參數個數。數組元素初值由系統自動賦予。

main(int argc,char *argv[]){

while(argc-->1) printf("%s\n",*++argv);

}

本例是顯示命令行中輸入的參數。如果上例的可執行文件名為e24.exe,存放在A驅動器的盤內。因此輸入的命令行為:

C:\>a:e24 BASIC dBASE FORTRAN 則運行結果為:

BASIC

dBASE

FORTRAN

該行共有4個參數,執行main時,argc的初值即為4。argv的4個元素分為4個字元串的首地址。執行while語句,每循環一次 argv值減1,當argv等於1時停止循環,共循環三次, 因此共可輸出三個參數。在printf函數中,由於列印項*++argv是先加1再列印, 故第一次列印的是argv[1]所指的字元串BASIC。第二、 三次循環分別列印後二個字元串。而參數e24是文件名,不必輸出

F. 7、C語言中,形參的默認存儲類別為。 (A)auto (B) static (C)register (D)extern

C。

在函數內部或復合語句內定義變數時,如果沒有指定的存儲類型或使用了auto說明符,系統就認為所定義的變數具有自動類別。

形參即函數的自變數,其初值來源於函數的調用。只有在程序執行過程中調用了函數,形參才有可能得到具體的值,並參與運算求得函數值。形參表相當於變數說明,但應特別注意:此處只能使用類型標識符,而不能直接使用類型。

用auto(或省略)來區分說明的局部變數。當執行進入局部變數所在的塊時,在棧上為變數分配存儲,退出塊時,存儲單元被回收。具有自動存儲期的變數在進入聲明該變數的程序塊時被建立,它在該程序塊活動時存在,退出該程序塊時撤銷。在函數內部定義的變數成為局部變數。

(6)c語言參數默認擴展閱讀:

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關鍵字時,表示變數已經在別處定義,所以不能在此處初始化。

網路-形式參數

網路-存儲類