最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言全局變量和局部變量的示例代碼

 更新時間:2023年05月15日 09:48:35   作者:C語言中文網(wǎng)  
本文主要介紹了C語言全局變量和局部變量的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在《C語言形參和實參的區(qū)別》中提到,形參變量要等到函數(shù)被調(diào)用時才分配內(nèi)存,調(diào)用結(jié)束后立即釋放內(nèi)存。這說明形參變量的作用域非常有限,只能在函數(shù)內(nèi)部使用,離開該函數(shù)就無效了。所謂作用域(Scope),就是變量的有效范圍。

不僅對于形參變量,C語言中所有的變量都有自己的作用域。決定變量作用域的是變量的定義位置。

局部變量

定義在函數(shù)內(nèi)部的變量稱為局部變量(Local Variable),它的作用域僅限于函數(shù)內(nèi)部, 離開該函數(shù)后就是無效的,再使用就會報錯。例如:

int f1(int a){
    int b,c;  //a,b,c僅在函數(shù)f1()內(nèi)有效
    return a+b+c;
}
int main(){
    int m,n;  //m,n僅在函數(shù)main()內(nèi)有效
    return 0;
}

幾點說明:

1) 在 main 函數(shù)中定義的變量也是局部變量,只能在 main 函數(shù)中使用;同時,main 函數(shù)中也不能使用其它函數(shù)中定義的變量。main 函數(shù)也是一個函數(shù),與其它函數(shù)地位平等。

2) 形參變量、在函數(shù)體內(nèi)定義的變量都是局部變量。實參給形參傳值的過程也就是給局部變量賦值的過程。

3) 可以在不同的函數(shù)中使用相同的變量名,它們表示不同的數(shù)據(jù),分配不同的內(nèi)存,互不干擾,也不會發(fā)生混淆。

4) 在語句塊中也可定義變量,它的作用域只限于當(dāng)前語句塊。

全局變量

在所有函數(shù)外部定義的變量稱為全局變量(Global Variable),它的作用域默認(rèn)是整個程序,也就是所有的源文件,包括 .c 和 .h 文件。例如:

int a, b;  //全局變量
void func1(){
    //TODO:
}
float x,y;  //全局變量
int func2(){
    //TODO:
}
int main(){
    //TODO:
    return 0;
}

a、b、x、y 都是在函數(shù)外部定義的全局變量。C語言代碼是從前往后依次執(zhí)行的,由于 x、y 定義在函數(shù) func1() 之后,所以在 func1() 內(nèi)無效;而 a、b 定義在源程序的開頭,所以在 func1()、func2() 和 main() 內(nèi)都有效。

局部變量和全局變量的綜合示例

【示例1】輸出變量的值:

#include <stdio.h>
int n = 10;  //全局變量
void func1(){
    int n = 20;  //局部變量
    printf("func1 n: %d\n", n);
}
void func2(int n){
    printf("func2 n: %d\n", n);
}
void func3(){
    printf("func3 n: %d\n", n);
}
int main(){
    int n = 30;  //局部變量
    func1();
    func2(n);
    func3();
    //代碼塊由{}包圍
    {
        int n = 40;  //局部變量
        printf("block n: %d\n", n);
    }
    printf("main n: %d\n", n);
    return 0;
}

運行結(jié)果:

func1 n: 20
func2 n: 30
func3 n: 10
block n: 40
main n: 30

代碼中雖然定義了多個同名變量 n,但它們的作用域不同,在內(nèi)存中的位置(地址)也不同,所以是相互獨立的變量,互不影響,不會產(chǎn)生重復(fù)定義(Redefinition)錯誤。

1) 對于 func1(),輸出結(jié)果為 20,顯然使用的是函數(shù)內(nèi)部的 n,而不是外部的 n;func2() 也是相同的情況。

當(dāng)全局變量和局部變量同名時,在局部范圍內(nèi)全局變量被“屏蔽”,不再起作用。或者說,變量的使用遵循就近原則,如果在當(dāng)前作用域中存在同名變量,就不會向更大的作用域中去尋找變量。

2) func3() 輸出 10,使用的是全局變量,因為在 func3() 函數(shù)中不存在局部變量 n,所以編譯器只能到函數(shù)外部,也就是全局作用域中去尋找變量 n。

3) 由{ }包圍的代碼塊也擁有獨立的作用域,printf() 使用它自己內(nèi)部的變量 n,輸出 40。

4) C語言規(guī)定,只能從小的作用域向大的作用域中去尋找變量,而不能反過來,使用更小的作用域中的變量。對于 main() 函數(shù),即使代碼塊中的 n 離輸出語句更近,但它仍然會使用 main() 函數(shù)開頭定義的 n,所以輸出結(jié)果是 30。

【示例2】根據(jù)長方體的長寬高求它的體積以及三個面的面積。

#include <stdio.h>
int s1, s2, s3;  //面積
int vs(int a, int b, int c){
    int v;  //體積
    v = a * b * c;
    s1 = a * b;
    s2 = b * c;
    s3 = a * c;
    return v;
}
int main(){
    int v, length, width, height;
    printf("Input length, width and height: ");
    scanf("%d %d %d", &length, &width, &height);
    v = vs(length, width, height);
    printf("v=%d, s1=%d, s2=%d, s3=%d\n", v, s1, s2, s3);
    return 0;
}

運行結(jié)果:

Input length, width and height: 10 20 30↙
v=6000, s1=200, s2=600, s3=300

根據(jù)題意,我們希望借助一個函數(shù)得到三個值:體積 v 以及三個面的面積 s1、s2、s3。遺憾的是,C語言中的函數(shù)只能有一個返回值,我們只能將其中的一份數(shù)據(jù),也就是體積 v 放到返回值中,而將面積 s1、s2、s3 設(shè)置為全局變量。全局變量的作用域是整個程序,在函數(shù) vs() 中修改 s1、s2、s3 的值,能夠影響到包括 main() 在內(nèi)的其它函數(shù)。

到此這篇關(guān)于C語言全局變量和局部變量的示例代碼的文章就介紹到這了,更多相關(guān)C語言全局變量和局部變量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言中全局變量,局部變量,靜態(tài)局部變量的區(qū)分方式

    C語言中全局變量,局部變量,靜態(tài)局部變量的區(qū)分方式

    這篇文章主要介紹了C語言中全局變量,局部變量,靜態(tài)局部變量的區(qū)分方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • C語言調(diào)用SQLite數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)增刪改查

    C語言調(diào)用SQLite數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)增刪改查

    SQLite是一種輕量級的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),是一個開源的、零配置的、服務(wù)器端的、自包含的、零管理的、事務(wù)性的SQL數(shù)據(jù)庫引擎,本文主要介紹了如何調(diào)用SQLite數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)增刪改查,需要的可以參考一下
    2023-08-08
  • OpenCV實現(xiàn)馬賽克功能

    OpenCV實現(xiàn)馬賽克功能

    這篇文章主要為大家詳細(xì)介紹了OpenCV實現(xiàn)馬賽克功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++基于隨機數(shù)實現(xiàn)福彩雙色球的方法示例

    C++基于隨機數(shù)實現(xiàn)福彩雙色球的方法示例

    這篇文章主要介紹了C++基于隨機數(shù)實現(xiàn)福彩雙色球的方法,結(jié)合完整實例形式分析了C++隨機數(shù)算法的實現(xiàn)與使用技巧,需要的朋友可以參考下
    2017-06-06
  • C++11中的時間庫std::chrono(引發(fā)關(guān)于時間的思考)

    C++11中的時間庫std::chrono(引發(fā)關(guān)于時間的思考)

    這篇文章主要介紹了C++11中的時間庫std::chrono(引發(fā)關(guān)于時間的思考),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • C++ Template 基礎(chǔ)篇(一):函數(shù)模板詳解

    C++ Template 基礎(chǔ)篇(一):函數(shù)模板詳解

    這篇文章主要介紹了C++ Template函數(shù)模板,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • C++ boost::asio編程-域名解析詳細(xì)介紹

    C++ boost::asio編程-域名解析詳細(xì)介紹

    這篇文章主要介紹了C++ boost::asio編程-域名解析詳細(xì)介紹的相關(guān)資料,這里附有實例代碼,幫助大家學(xué)習(xí)理解這部分知識,需要的朋友可以參考下
    2016-11-11
  • 基于C語言實現(xiàn)靜態(tài)通訊錄的示例代碼

    基于C語言實現(xiàn)靜態(tài)通訊錄的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C語言實現(xiàn)一個簡單的靜態(tài)通訊錄,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定幫助,需要的可以參考一下
    2022-07-07
  • C++?ffmpeg實現(xiàn)將視頻幀轉(zhuǎn)換成jpg或png等圖片

    C++?ffmpeg實現(xiàn)將視頻幀轉(zhuǎn)換成jpg或png等圖片

    有時播放實時流的時候有截圖的需求,需要將解碼出來的圖片保存本地或上傳服務(wù)器,這時就需要將avframe中的數(shù)據(jù)編碼成png、jpg等格式的圖片,我們使用ffmpeg的相關(guān)編碼器就可以實現(xiàn)功能,下面就來講講具體實現(xiàn)方法吧
    2023-03-03
  • C語言超詳細(xì)分析多進(jìn)程的概念與使用

    C語言超詳細(xì)分析多進(jìn)程的概念與使用

    在一個項目中并發(fā)執(zhí)行任務(wù)時多數(shù)情況下都會選擇多線程,但有時候也會選擇多進(jìn)程,例如可以同時運行n個記事本編輯不同文本,由一個命令跳轉(zhuǎn)到另外一個命令,或者使用不同進(jìn)程進(jìn)行協(xié)作
    2022-08-08

最新評論

双柏县| 西乡县| 赣榆县| 土默特右旗| 全南县| 荥经县| 田东县| 富宁县| 仁化县| 清丰县| 东丰县| 赫章县| 察雅县| 双江| 彰化市| 青龙| 惠东县| 五莲县| 凉山| 宝山区| 广元市| 库车县| 来安县| 淮阳县| 宣汉县| 荃湾区| SHOW| 虞城县| 湖口县| 澄城县| 积石山| 高阳县| 麻阳| 邢台县| 那曲县| 民和| 安远县| 庆元县| 西丰县| 临洮县| 勐海县|