新聞中心
C語(yǔ)言函數(shù)的默認(rèn)參數(shù)
C語(yǔ)言中沒有參數(shù)默認(rèn)值的概念,但其實(shí)可以利用宏來(lái)模擬參數(shù)的默認(rèn)值;
創(chuàng)新互聯(lián)公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元魯?shù)樽鼍W(wǎng)站,已為上家服務(wù),為魯?shù)楦鞯仄髽I(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
我們之前介紹過可變參數(shù)宏與逗號(hào)運(yùn)算符,將兩者相結(jié)合的話可以定義出以下形式的宏:
當(dāng)在 func() 里不填寫任何內(nèi)容的時(shí)候,正常情況下宏展開后會(huì)是 func((default,)) ,但由于 ##__VA_ARGS__ 會(huì)將前面多余的逗號(hào)忽略,所以宏展開后就相當(dāng)于 __func((default)) ;
當(dāng)在 func() 括號(hào)里填寫有效值的時(shí)候,根據(jù)逗號(hào)運(yùn)算符的值等于最后一個(gè)表達(dá)式的值的性質(zhì),宏會(huì)被展開為 __func((##__VA_ARGS__)) 既 default 被丟棄,傳入的值只有我們填寫的內(nèi)容,通過這個(gè)技巧我們就可以設(shè)計(jì)出一個(gè)帶有默認(rèn)參數(shù)的函數(shù)。
示例:
定義一個(gè)函數(shù)默認(rèn)參數(shù)為 0xff ,不傳任何參數(shù)的時(shí)候打印 0xff ,傳入有效值的時(shí)候就打印我們傳入的內(nèi)容;
輸出:
C語(yǔ)言中定義int變量,默認(rèn)值是多少
如果是定義的全局變量或者靜態(tài)變量,未初始化的話就是0.如果是局部變量,那就是以前殘留在堆棧里的隨機(jī)值。
區(qū)分變量的類型,有兩種情況。
1、局部變量。
局部變量在沒有顯式初始化時(shí),其值C語(yǔ)言規(guī)范沒做要求,可以是隨機(jī)值,也可以是編譯器隨意給定的值。
比如gcc編譯器的局部變量就是隨機(jī)值,可能為任何值。而微軟的編譯器,如VC或VS,則會(huì)初始化為全c,即0xCCCCCCCC。
2、全局變量或靜態(tài)局部變量。
所有的全局變量,即定義在函數(shù)外的變量,默認(rèn)值為0。
所有的靜態(tài)局部變量,即定義在函數(shù)內(nèi)部的static int name形式的,默認(rèn)初始化為0。
擴(kuò)展資料:
int是一種數(shù)據(jù)類型,在編程語(yǔ)言(C、C++、C#、Java等)中,是用于定義整數(shù)類型變量的標(biāo)識(shí)符。
目前在一般的電腦中,int占用4字節(jié),32比特,數(shù)據(jù)范圍為-2147483648~2147483647[-2^31~2^31-1]
在之前的微型機(jī)中,int占用2字節(jié),16比特,數(shù)據(jù)范圍為-32768~32767[-2^15~2^15-1]
定義方法:
int?i;//定義整形變量i
int?i=1;//定義整形變量i并初始化為1
定義常量:
const?int?i;//編譯錯(cuò)誤,因?yàn)槌A啃枰o予一個(gè)初值
const?int?i=1;//定義常量i,值為1
Java定義常量:
final?int?i=1;//定義常量i,值為1
參考資料來(lái)源:百度百科-INT (數(shù)據(jù)類型)
在C語(yǔ)言中函數(shù)的默認(rèn)參數(shù)類型
??在許多c語(yǔ)言初學(xué)者中編寫函數(shù)時(shí),都喜歡將無(wú)參函數(shù)中的參數(shù)類型忽略。
??但是實(shí)際上 默認(rèn)的參數(shù)類型 不是無(wú)參 void ,而是接受 任意數(shù)量和類型的參數(shù) 。也就是說 int func() 和 int func(void) 是不一樣的。下面通過一個(gè)例子加深了解一下在C語(yǔ)言中函數(shù)的默認(rèn)參數(shù)類型:
??所以說,在使用c語(yǔ)言編寫無(wú)參函數(shù)時(shí),一定要把 void 寫上去,不然會(huì)有安全隱患。
c語(yǔ)言(注意不是C++)函數(shù)能不能設(shè)置默認(rèn)值
C語(yǔ)言不支持默認(rèn)參數(shù),不過可以用宏來(lái)模擬:
//---------------------------------------------------------------------------
#include stdio.h
#define DEFAULT 40 /*默認(rèn)參數(shù)值*/
#define FUN(A) fun(#A##"-") /*用于實(shí)現(xiàn)默認(rèn)參數(shù)的宏*/
int f(int n) /*用于實(shí)驗(yàn)?zāi)J(rèn)參數(shù)的函數(shù)*/
{
return printf("%d\n",n);
}
int fun(const char *a) /*確定函數(shù)調(diào)用的函數(shù),返回值類型要和實(shí)際需要調(diào)用的f()函數(shù)返回值類型一致*/
{
int n; /*變量的類型要和f()函數(shù)參數(shù)的類型一樣*/
if (a[0]=='-') n=DEFAULT;
else sscanf(a,"%d",n);
return f(n);
}
int main(void)
{
FUN();
FUN(67);
return 0;
}
//---------------------------------------------------------------------------
C語(yǔ)言函數(shù)形參初始值?
可以這樣調(diào)用。
int b=0指的是默認(rèn)參數(shù),調(diào)用時(shí)傳入或不傳入b都行,如果不傳入b的話,那么b的值就是0。
另外注意只有最后面的參數(shù)可以是默認(rèn)參數(shù)。
文章題目:c語(yǔ)言給函數(shù)默認(rèn)值,c語(yǔ)言函數(shù)參數(shù)默認(rèn)值
當(dāng)前鏈接:http://fisionsoft.com.cn/article/dsegiop.html