亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

《Linux C一站式學習》第三章 簡單的函數

系統 1842 0
4. 全局變量、局部變量和作用域
全局變量定義在所有的函數體之外,它們在程序開始運行時分配存儲空間,在程序結束時釋放存儲空間,在任何函數中都可以訪問全局變量。
如果全局變量和局部變量重名了會怎么樣呢?

例3.6.作用域

則第一次調用 print_time 打印的是全局變量的值,第二次直接調用 printf 打印的則是 main 函數局部變量的值。
設想整個源文件是一張大紙,也就是全局變量的作用域,而 main 函數是蓋在這張大紙上的一張小紙,也就是 main 函數局部變量的作用域。在小紙上用到標識符 hour minute 時應該參考小紙上的定義,因為大紙(全局變量的作用域)被蓋住了,如果在小紙上用到某個標識符卻沒有找到它的定義,那么再去翻看下面的大紙上有沒有定義,例如上圖中的變量 x

局部變量可以用類型相符的任意表達式來初始化,而全局變量只能用常量表達式(Constant Expression)初始化 。例如,全局變量 pi 這樣初始化是合法的:

      double pi = 3.14 + 0.0016;
    

但這樣初始化是不合法的:

      double pi = acos(-1.0);
    

然而局部變量這樣初始化卻是可以的。程序開始運行時要用適當的值來初始化全局變量,所以初始值必須保存在編譯生成的可執行文件中,因此初始值在 編譯時 就要計算出來,然而上面第二種Initializer的值必須在程序 運行時 調用 acos 函數才能得到,所以不能用來初始化全局變量。請注意區分編譯時和運行時這兩個概念。為了簡化編譯器的實現,C語言從語法上規定全局變量只能用常量表達式來初始化,因此下面這種全局變量初始化是不合法的:

      int minute = 360;int hour = minute / 60;
    

雖然在編譯時計算出 hour 的初始值是可能的,但是 minute / 60 不是常量表達式,不符合語法規定,所以編譯器不必想辦法去算這個初始值。

如果全局變量在定義時不初始化則初始值是0,如果局部變量在定義時不初始化則初始值是不確定的。所以, 局部變量在使用之前一定要先賦值 ,如果基于一個不確定的值做后續計算肯定會引入Bug。

例3.7.驗證局部變量存儲空間的分配和釋放

          #include <stdio.h> void foo(void) { int i; printf("%d\n", i); i = 777; } int main(void) { foo(); foo(); return 0; }
        

結果是:

      134518128 777
    
修改一下
      int main(void) { foo(); printf("hello\n"); foo(); return 0; }
    

結果是:

      134518200 hello 0
    

非定義的函數聲明也可以寫在局部作用域中,例如:

      int main(void) { void print_time(int, int); print_time(23, 59); return 0; }
    

這樣聲明的標識符 print_time 具有局部作用域,只在 main 函數中是有效的函數名,出了 main 函數就不存在 print_time 這個標識符了。

雖然在一個函數體中可以聲明另一個函數,但不能定義另一個函數,C語言不允許嵌套定義函數。

《Linux C一站式學習》第三章 簡單的函數


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99视频有精品视频免费观看 | 亚洲精品综合网 | 在线观看视频一区 | 亚洲综合久久久久久888 | 亚洲精品在线网站 | 久久精品国产四虎 | 天堂成人在线视频 | 12至16末成年毛片视频 | 亚洲一区免费看 | 久久精品免费观看 | 久久亚洲影院 | 四虎网站最新网址 | 伦理不卡| 亚洲第九十七页 | 欧美激情高清免费不卡 | 小明看看成人免费 | 狠狠干天天干 | 久久精品一区二区三区不卡牛牛 | 欧美日韩不卡码一区二区三区 | 曰批免费视频播放在线看片一 | 俄罗斯一级成人毛片 | 日本成本人在线观看免费视频 | 亚洲精品视频在线观看免费 | 中文字幕视频一区 | 深夜在线免费 | 精品久久久久久中文字幕无碍 | 4htv影院永久免费在线地址 | 色综合综合色综合色综合 | 国产精欧美一区二区三区 | 夜夜骑日日 | 97影院论理手机在线观看 | 欧美乱大交xxxxx在线观看 | 日韩一区三区 | 日本不卡一区二区 | 成年视频免费 | 国内自拍一二三四2021 | 中文字幕亚洲综合 | 国产69精品久久久久9999 | 天天操天天艹 | 亚洲精品二三区伊人久久 | 不卡的毛片 |