顯然提問(wèn)者沒(méi)有搞清楚 函數(shù) 聲明和定義 這兩個(gè)概念
成都創(chuàng)新互聯(lián)是一家企業(yè)級(jí)云計(jì)算解決方案提供商,超15年IDC數(shù)據(jù)中心運(yùn)營(yíng)經(jīng)驗(yàn)。主營(yíng)GPU顯卡服務(wù)器,站群服務(wù)器,服務(wù)器機(jī)柜租賃,海外高防服務(wù)器,機(jī)柜大帶寬、租用·托管,動(dòng)態(tài)撥號(hào)VPS,海外云手機(jī),海外云服務(wù)器,海外服務(wù)器租用托管等。
第一行void abc(void); 是聲明,不是定義,因?yàn)闆](méi)有函數(shù)體,只是告訴Main函數(shù),你要調(diào)用的abc函數(shù)是有的,定義在后面
Main函數(shù)中的abc函數(shù)是調(diào)用,調(diào)用當(dāng)然可以多次使用,函數(shù)的作用也在于此,一次定義,多次調(diào)用,體現(xiàn)代碼復(fù)用的好處
最后void abc(void){ …… } 到結(jié)束,是定義了,說(shuō)明函數(shù)干什么的
ky 寫 abc函數(shù)里 是推薦的方式,成為局部變量,函數(shù)調(diào)用完后,ky可被系統(tǒng)釋放內(nèi)存
ky不能寫在Main函數(shù)里,abc將無(wú)法訪問(wèn)其他代碼塊(花括號(hào)內(nèi))的局部變量
ky可以寫在最外面,即不在任何代碼塊內(nèi),且要寫最頂行(建議),這樣后續(xù)的函數(shù)都可以訪問(wèn)該(全局)變量,但一般建議不要過(guò)多使用全局變量
把變量定義在主函數(shù)之外,即把變量設(shè)置為全局的。
一般我們都把變量的定義放在函數(shù)中,因此變量的范圍就是在本函數(shù)中。可是如果定義在所有函數(shù)的外面,這樣所有的函數(shù)中,都可以使用本變量。
你可以試一下這個(gè)程序。定義一個(gè)全局變量a,在主函數(shù)中進(jìn)行賦值,然后在子函數(shù)中進(jìn)行輸出,結(jié)果是5.
#includestdio.h
int a;
void func();//函數(shù)聲明
int main()
{
a=5;
func();
}
void func()
{
printf("%d\n", a);
}
+++++++++++++++++++++++++++++++++++++++++++++++++++
當(dāng)然,除了定義全局變量這個(gè)方法,還有其他的方法,那就是指針。在子函數(shù)的參數(shù)中傳遞變量的地址,依然可以使用該變量,依然能夠改變?cè)撟兞康闹?。因?yàn)橹骱瘮?shù)和子函數(shù)的變量共用的是同一個(gè)地址的變量,因此,不管在哪個(gè)函數(shù)中對(duì)變量進(jìn)行操作,都會(huì)影響變量。
比如下面這個(gè)程序,在主函數(shù)中a的值為5,將變量a的地址傳遞過(guò)去,子函數(shù)將該地址中的變量的值設(shè)置為3,然后主函數(shù)輸出,結(jié)果卻是3.
#includestdio.h
void func(int *b);//函數(shù)聲明
int main()
{
int a=5;
func(a);//把變量a的地址傳遞過(guò)去
printf("%d\n", a);
}
void func(int *b)
{
*b=3; //將地址b中變量的值設(shè)置為3
}
靜態(tài)變量,特點(diǎn)就是只初始化一次。所以在這里b是只定義一次的。
于是
1 會(huì)占用,但是很少。 和全局變量定義差不多
2 沒(méi)有,因?yàn)椴淮嬖诙啻味x,只定義了一次。
3 除了生命周期,最大的差別就是作用域了。
局部變量,只能在函數(shù)內(nèi)訪問(wèn),而全局變量就是誰(shuí)都能訪問(wèn),這樣很容易出現(xiàn)混亂,尤其是多線程的情況下。
除此外,非靜態(tài)的局部變量,在函數(shù)退出后內(nèi)存就釋放了,如果所有變量都定義成全局的,那明顯是對(duì)內(nèi)存的一種浪費(fèi)。
c語(yǔ)言中主函數(shù)中定義的變量只能在主函數(shù)中使用,所以你還得再定義一個(gè)變量。
當(dāng)然,捏可以把主函數(shù)中定義的這個(gè)變量傳遞給被調(diào)用的函數(shù)作為參數(shù)。
例如
void
fun(int
x)
{
}
main()
{
int
num=9;
fun(9);
}
但是如果你要在被調(diào)用函數(shù)中使用這個(gè)變量例如
fun()
{
num++;
}
像這樣,就是錯(cuò)的,編譯器會(huì)報(bào)錯(cuò),main中定義的變量是局部變量,只能在main中使用。
你可以在main外部定義一個(gè)變量,這樣在被調(diào)用函數(shù)中也就可以使用了。
本文標(biāo)題:c語(yǔ)言定義函數(shù)有變量,C語(yǔ)言定義變量
網(wǎng)址分享:http://jinyejixie.com/article32/hsispc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網(wǎng)站排名、定制網(wǎng)站、服務(wù)器托管、移動(dòng)網(wǎng)站建設(shè)、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容