把變量定義在主函數(shù)之外,即把變量設置為全局的。
創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站建設、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務崇陽,十載網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:13518219792
一般我們都把變量的定義放在函數(shù)中,因此變量的范圍就是在本函數(shù)中。可是如果定義在所有函數(shù)的外面,這樣所有的函數(shù)中,都可以使用本變量。
你可以試一下這個程序。定義一個全局變量a,在主函數(shù)中進行賦值,然后在子函數(shù)中進行輸出,結果是5.
#includestdio.h
int a;
void func();//函數(shù)聲明
int main()
{
a=5;
func();
}
void func()
{
printf("%d\n", a);
}
+++++++++++++++++++++++++++++++++++++++++++++++++++
當然,除了定義全局變量這個方法,還有其他的方法,那就是指針。在子函數(shù)的參數(shù)中傳遞變量的地址,依然可以使用該變量,依然能夠改變該變量的值。因為主函數(shù)和子函數(shù)的變量共用的是同一個地址的變量,因此,不管在哪個函數(shù)中對變量進行操作,都會影響變量。
比如下面這個程序,在主函數(shù)中a的值為5,將變量a的地址傳遞過去,子函數(shù)將該地址中的變量的值設置為3,然后主函數(shù)輸出,結果卻是3.
#includestdio.h
void func(int *b);//函數(shù)聲明
int main()
{
int a=5;
func(a);//把變量a的地址傳遞過去
printf("%d\n", a);
}
void func(int *b)
{
*b=3; //將地址b中變量的值設置為3
}
1、首先,我們可以在函數(shù)外面定義變量,就是全局變量。
2、局部變量可以與全局變量同樣命名。
3、但是優(yōu)先級是局部變量優(yōu)先。
4、但是局部變量的生命周期是整個結構內(nèi)。
5、全局變量是整個程序結束,才釋放。
6、我們也可以為變量加上修飾符。
定義在函數(shù)體外部的變量叫全局變量,
要定義全局變量你只要把變量定義在
所有函數(shù)外部即可。
要注意的是,全局變量只對它定義位
置以下的函數(shù)可見。
#includestdio.h?
void?f1();
void?f2();
int?y=100;
int?main()
{
printf("%d\n\n",y);
//printf("%d\n",x);這不可以讀x,x對main()不可見?
f1();
f2();
return?0;
}
int?x;
void?f1()
{
x=200;
}?
void?f2()
{
printf("%d\n",x);
printf("%d\n",y);
}
變量的存儲類別決定了變量中的數(shù)據(jù)在計算機內(nèi)存中的存儲位置。C語言中局部變量存放在動態(tài)存儲區(qū),全局變量或者靜態(tài)變量存放在靜態(tài)存儲區(qū)。下面是關于C語言變量的定義與使用,歡迎參考!
如果要為單片機控制系統(tǒng)編寫出高質量的C語言程序,合理的定義并使用變量是非常重要的。程序是用來處理數(shù)據(jù)的,而變量就是用來存儲數(shù)據(jù)的。每定義一個變量,編譯器就會在系統(tǒng)的RAM中分配一個物理存儲區(qū)域。在單片機控制系統(tǒng)中,RAM資源是非常有限的,作為單片機程序員,絕對不能隨意的定義變量,需要精打細算合理定義。為了實現(xiàn)這個目標,必須要對變量的多個特性有深刻的認識。
變量特性:
第一、變量定義要選擇恰到好處的類型,變量的類型直接決定了它所存儲的數(shù)據(jù)取值范圍,這類似于我們生活中使用的各種容器,選擇合適的變量類型,不但能保證數(shù)據(jù)存儲安全,還能有效的節(jié)約系統(tǒng)資源;
第二、變量的作用范圍必須清楚,C語言最基本的功能單元是函數(shù),在函數(shù)內(nèi)部使用的變量是私有變量,只能在函數(shù)內(nèi)部使用。多個函數(shù)組成一個程序的功能模塊,并安置在某一個C文件中,在這些函數(shù)的頭部定義的變量是靜態(tài)變量(局部變量),這種類型的變量模塊內(nèi)部的函數(shù)都可以訪問。如果在模塊內(nèi)部聲明變量,并在該模塊的頭文件中導出,該類型變量就是全局變量,全局變量在整個工程中的所有函數(shù)都可以訪問;
第三、變量占用的RAM資源,私有變量是可以釋放的,靜態(tài)變量與全局變量是不可以釋放的。也就是說在程序運行的整個過程中,私有變量占用資源可以供不同的函數(shù)重復利用,而靜態(tài)變量與全局變量是完全被占用不能重復利用的;
第四、變量可以存放常數(shù),但因為單片機RAM資源有限,強烈建議不要用變量存放常量,而是在資源相對豐富的FlashROM中存放常量;
第五、局部變量與全局變量對于函數(shù)來說,訪問非常方便,但缺點顯而易見:訪問的函數(shù)越多,數(shù)據(jù)的安全性越低,一旦出現(xiàn)數(shù)據(jù)異常,很難排除問題。所以,請盡量減少局部變量與全局變量的使用;
第六、函數(shù)的型參個數(shù)盡量減少,這樣型參只會占用通用寄存器組來完成參數(shù)傳遞工作。如果參數(shù)過多,編譯器可能會被迫分配占用RAM資源,這樣不但參數(shù)傳遞效率變低,同時還會導致RAM資源浪費;
明確上述變量定義與使用特點后,在編寫程序的時候,一定要利用好這些特性并結合程序的特點,靈活的使用各種類型、各種作用范圍的變量,使程序在最大限度上得到優(yōu)化,使系統(tǒng)性能提升至最優(yōu)的狀態(tài),才是我們嵌入式開發(fā)者的終極目標!
拓展:C語言入門學習
什么人需要學習C語言?
從51JOB的統(tǒng)計數(shù)據(jù)來看,選擇C語言人才的企業(yè)多數(shù)以電子工程師、嵌入式工程師、硬件工程師、IOS工程師等為主,學歷本科以上相關專業(yè),三年以上工作經(jīng)驗,且外語水平要求至少四級以上。既然C語言學習者的就業(yè)門檻那么高,為什么還有很多人執(zhí)著的去學習C語言呢?總結而言,無外乎以下幾點原由:
1)C語言不是面向對象語言。
因為這一點,任何學習C語言的人必須學會用函數(shù)思考問題。當你真正的去學習一門面向對象語言時,就會有C語言的函數(shù)學習基礎去對比。這會使學習面向對象編程更容易理解和更有樂趣。
2)用C編程就像進行智力體操。
你要顧及到每一件事情,而這在很多其他語言中他會為你處理。你要管理指針,內(nèi)存分配,和內(nèi)存回收。你要明白如何處理串,還有動態(tài)數(shù)據(jù)。在其他語言中,所有這些對你來說是隱藏的。你不知道他們?nèi)绾芜\行,更不用說改變他們的運行方式了。你得到了使用的便利,失卻了對程序的控制和速度。很多情況下,這是筆值得的買賣。其他的情況下就不是這樣了。
3)不同情況下你會使用不同的編程語言。
某些情況下要求使用Lisp,其他的要Java,還有別的要C++。但是C是你堅實的基礎。你可能不會使用它做一些項目,但是它會幫助提高你的能力,熟練的用其他語言編程。
4)除了匯編語言之外,C代碼生成的程序比其他任何語言生成的程序來得更小和運行更快。
那么為什么不學匯編語言呢?匯編是一門學了很有用的.語言,但是它沒有C那樣的可移植性,并且其他流行的語言比如JAVA的語法是基于C的,而不是匯編。你仍然應該學匯編,但它并不會證明它會像學C那樣有用。
5)如果你想要寫一個視頻游戲引擎或操作系統(tǒng),你會需要C。
你不能使用C#, Java, 或 Basic來完成這些編程任務。
C語言的發(fā)展史:
C語言是一種計算機程序設計語言,它既具有高級語言的特點,又具有匯編語言的特點。它由美國貝爾研究所的D.M.Ritchie于1972年推出,1978年后,C語言已先后被移植到大、中、小及微型機上,它可以作為工作系統(tǒng)設計語言,編寫系統(tǒng)應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬件的應用程序。它的應用范圍廣泛,具備很強的數(shù)據(jù)處理能力,不僅僅是在軟件開發(fā)上,而且各類科研都需要用到C語言,適于編寫系統(tǒng)軟件,三維,二維圖形和動畫,具體應用比如單片機以及嵌入式系統(tǒng)開發(fā)。
我適合學習C語言嗎?
首先我們要認清一個事實:C語言工作者只是眾多從事軟件開發(fā)者中的一小部分,在深圳這樣一個IT企業(yè)云集的大城市,使用其它語言從事軟件開發(fā)的工作者多如牛毛,薪資待遇不比從事C語言開發(fā)的人低,當編程愛好者在選擇第一個編程語言時,C語言不一定是首先。我適合學習C語言嗎?解決這個問題,先回答以下幾個問題:
1)你學習C語言的目的是什么?如果是想從事這方面的工作,那么請義無反顧的堅持下去,推薦你在《微機原理》、《計算機組成原理》和《計算機系統(tǒng)結構》三本書中選一本配合《C語言程序設計》來看,這樣可以融匯貫通,讓你對編程有更深入更系統(tǒng)化的理解。而這種理解對計算機類學科的學習來說很重要。
2)您具備學習C語言的條件嗎?由于入職C語言編程的企業(yè)對入職者的要求比較高,在沒有編程工作經(jīng)驗前提下多數(shù)想通過自學進入類似企業(yè)的人幾乎為零,包括很多計算機專業(yè)畢業(yè)的大、中專畢業(yè)生在校期間都會學到C語言,畢業(yè)出來后依然云里霧里。C語言的開發(fā),需要在實際工作中才能快速掌握。同時,英語(從事C語言開發(fā)需要經(jīng)常查閱英文資料,尤其是單片機領域)、學歷、數(shù)學算法、極強的邏輯思維能力等等也是讓多數(shù)人望而卻步的門檻。
顯然提問者沒有搞清楚 函數(shù) 聲明和定義 這兩個概念
第一行void abc(void); 是聲明,不是定義,因為沒有函數(shù)體,只是告訴Main函數(shù),你要調(diào)用的abc函數(shù)是有的,定義在后面
Main函數(shù)中的abc函數(shù)是調(diào)用,調(diào)用當然可以多次使用,函數(shù)的作用也在于此,一次定義,多次調(diào)用,體現(xiàn)代碼復用的好處
最后void abc(void){ …… } 到結束,是定義了,說明函數(shù)干什么的
ky 寫 abc函數(shù)里 是推薦的方式,成為局部變量,函數(shù)調(diào)用完后,ky可被系統(tǒng)釋放內(nèi)存
ky不能寫在Main函數(shù)里,abc將無法訪問其他代碼塊(花括號內(nèi))的局部變量
ky可以寫在最外面,即不在任何代碼塊內(nèi),且要寫最頂行(建議),這樣后續(xù)的函數(shù)都可以訪問該(全局)變量,但一般建議不要過多使用全局變量
當前名稱:定義函數(shù)c語言定義變量,變量的定義c語言
文章出自:http://chinadenli.net/article44/hedphe.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設、動態(tài)網(wǎng)站、Google、域名注冊、移動網(wǎng)站建設、網(wǎng)站設計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)