c語言參數默認值
『壹』 默認參數的用法
c語言中沒有參數默認值的概念,可以利用宏來模擬參數默認值;
在C++中,可以為參數指定默認值。在函數調用時沒有指定與形參相對應的實參時, 就自動使用默認參數。
默認參數的語法與使用:
(1)在函數聲明或定義時,直接對參數賦值。這就是默認參數;
(2)在函數調用時,省略部分或全部參數。這時可以用默認參數來代替。
注意:
(1)默認參數只可在函數聲明中設定一次。只有在無函數聲明時,才可以在函數定義中設定。
(2)默認參數定義的順序為自右到左。即如果一個參數設定了預設值時,其右邊的參數都要有預設值。
如:int mal(int a, int b=3, int c=6, int d=8) 正確,按從右到左順序設定默認值。
int mal(int a=6, int b=3, int c=5, int d) 錯誤,未按照從右到左設定默認值。c設定預設值了,而其右邊的d沒有預設值。
(3)默認參數調用時,則遵循參數調用順序,自左到右逐個調用。這一點要與第(2)分清楚,不要混淆。
如:void mal(int a, int b=3, int c=5); //默認參數
mal(3, 8, 9 ); //調用時有指定參數,則不使用默認參數
mal(3, 5); //調用時只指定兩個參數,按從左到右順序調用,相當於mal(3,5,5);
mal(3); //調用時只指定1個參數,按從左到右順序調用,相當於mal(3,3,5);
mal( ); //錯誤,因為a沒有默認值
mal(3, , 9) //錯誤,應按從左到右順序逐個調用(調用實參,即,實參必須是連續的)
再如: void mal(int a=8, int b=3, int c=5); //默認參數
mal( ); //正確,調用所有默認參數,相當於mal(8,3,5);
(4)默認值可以是全局變數、全局常量,甚至是一個函數。但不可以是局部變數。因為默認參數的調用是在編譯時確定的,而局部變數位置與默認值在編譯時無法確定。
『貳』 C語言-默認值
如果是全局變數,所有的數值變數都賦零,字元變數都賦NULL即0.指針變數也是NULL。即全部變數都自動初始化了。
如果是局部變數,所有的變數都不初始化,因此為隨機數。如果不賦值就使用,很危險。
『叄』 C語言中定義int變數,默認值是多少
如果是定義的全局變數或者靜態變數,未初始化的話就是0.如果是局部變數,那就是以前殘留在堆棧里的隨機值。
區分變數的類型,有兩種情況。
1、局部變數。
局部變數在沒有顯式初始化時,其值C語言規范沒做要求,可以是隨機值,也可以是編譯器隨意給定的值。
比如gcc編譯器的局部變數就是隨機值,可能為任何值。而微軟的編譯器,如VC或VS,則會初始化為全c,即0xCCCCCCCC。
2、全局變數或靜態局部變數。
所有的全局變數,即定義在函數外的變數,默認值為0。
所有的靜態局部變數,即定義在函數內部的static int name形式的,默認初始化為0。
(3)c語言參數默認值擴展閱讀:
int是一種數據類型,在編程語言(C、C++、C#、Java等)中,是用於定義整數類型變數的標識符。
目前在一般的電腦中,int佔用4位元組,32比特,數據范圍為-2147483648~2147483647[-2^31~2^31-1]
在之前的微型機中,int佔用2位元組,16比特,數據范圍為-32768~32767[-2^15~2^15-1]
定義方法:
inti;//定義整形變數i
inti=1;//定義整形變數i並初始化為1
定義常量:
constinti;//編譯錯誤,因為常量需要給予一個初值
constinti=1;//定義常量i,值為1
Java定義常量:
finalinti=1;//定義常量i,值為1
『肆』 C語言中的全局變數的默認值
全局變數在沒有賦值以前系統默認為0,而局部變數在沒有賦值以前的值是不確定的,所以在聲明局部變數的時候一定要初始化。