精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

學了這么久的C,作用域,存儲器,鏈接屬性該弄清楚了

開發 后端
這些是編程語言中的基本概念,如果你還不是非常明確地清楚標題的問題,并且不知道作用域,鏈接屬性,存儲期等概念的具體含義,那么本文你不該錯過。

[[352572]]

本文轉載自微信公眾號「編程珠璣」,作者守望先生。轉載本文請聯系編程珠璣公眾號。  

前言

這些是編程語言中的基本概念,如果你還不是非常明確地清楚標題的問題,并且不知道作用域,鏈接屬性,存儲期等概念的具體含義,那么本文你不該錯過。為了更加清晰的理解我們的問題,需要先了解三個概念:作用域,鏈接屬性,存儲期。

作用域

C語言中,作用域用來描述標識符能夠被哪些區域訪問。

而常見作用域有以下幾種:

  • 塊作用域,可見范圍是從定義處到包含該定義的塊結尾
  • 函數作用域,goto語句的標簽就具有函數作用域
  • 文件作用域,從定義處到定義該文件的末尾都可見。定義在函數之外的變量,就具有文件作用域了。
  • 函數原型作用域,從形參定義處到原型聲明結束

為了便于說明,我們來看一個例子,就很容易理解了:

  1. /**************************** 
  2. 作者:守望先生 
  3. 來源:公眾號編程珠璣 
  4. 個人博客:https://www.yanbinghu.com 
  5. ***************************************/ 
  6. #include <stdio.h> 
  7. int num1 = 222;         //定位在函數外,具有文件作用域 
  8. static int num2 = 111;  //定義在函數外,具有文件作用域 
  9. int swap(int *a,int *b); //這里的a,b是函數原型作用域 
  10. int swap(int *a,int *b) 
  11.     if(NULL== a || NULL == b) 
  12.         goto error;     
  13.     else 
  14.     { 
  15.         int temp = *a;  //定義在函數內,塊作用域 
  16.         *a = *b; 
  17.         *b = temp
  18.         return 0; 
  19.     } 
  20.     //printf("temp is %d\n",temp);   //因為temp具有塊作用域,因此在這里不能直接使用 
  21.     error://goto語句的標簽,函數作用域,因此在前面就可以引用 
  22.         { 
  23.             printf("input para is NULL\n"); 
  24.             return -1; 
  25.         } 
  26. int main(void) 
  27.     printf("num1=%d,num2=%d\n",num1,num2); 
  28.     swap(&num1,&num2);  //num1 num2具有文件作用域,可以在main函數中直接使用 
  29.     printf("num1=%d,num2=%d",num1,num2); 
  30.     return 0; 

可以看到,error標簽具有函數作用域,整個函數內都可見,而temp具有塊作用域,因此在大括號外部,不能直接使用它。而num1和num2具有文件作用域,因此main函數可以直接使用它。

鏈接屬性

在《hello程序是如何變成可執行文件的》我們說到了編譯的過程,最后一個步驟就是鏈接。鏈接屬性決定了在不同作用域的同名標識符能否綁定到同一個對象或者函數。或者說,不同作用域的標識符在編譯后是否是同一個實體。

c變量有三種鏈接屬性:

  • 外部鏈接,extern修飾的,或者沒有static修飾的具有文件作用域的變量具有外部鏈接屬性
  • 內部鏈接,static修飾的具有文件作用域的變量具有內部鏈接屬性
  • 無鏈接,塊作用域,函數作用域和函數原型作用域的變量無鏈接屬性

再稍作解釋,沒有static修飾,且具有文件作用域的變量,他們在鏈接時,多個同名標識符的變量最終都綁定到同一個實體。而static修飾的具有文件作用域的變量就不一樣了,不同文件內,即便標識符名字相同,它們也綁定到了不同的實體。

因此,如果我們希望某個變量或函數只在某一個文件使用,那么使用static修飾是一個很好的做法。

同樣的,來看一個例子。

  1. /**************************** 
  2. 作者:守望先生 
  3. 來源:公眾號編程珠璣 
  4. 個人博客:https://www.yanbinghu.com 
  5. ***************************************/ 
  6. #include <stdio.h> 
  7. int a = 5;   //文件作用域,外部鏈接屬性,其他文件可通過extern int a的方式使用該文件的a 
  8. static b = 6;  //文件作用域,內部鏈接屬性,即便其他文件也有同名標識符,它們也是不同的 
  9. int main(void) 
  10.     int sum = 0 ; //無鏈接屬性 
  11.     sum = a + b; 
  12.     printf("sum is %d\n",sum); 
  13.     return 0; 

從代碼中可以看到,a和b都具有文件作用域,a具有外部鏈接屬性,而b具有內部鏈接屬性,sum具有塊作用域,因此無鏈接屬性。

存儲期

實際上作用域和鏈接屬性都描述了標識符的可見性,而存儲期則描述了這些標識符對應的對象的生存期。存儲期,也分下面幾種:

  • 靜態存儲期,程序執行期間一直都在,文件作用域的變量具有靜態存儲期
  • 自動存儲期,它(變長數組除外)從塊開始,到塊末尾,因此,塊作用域的變量具有自動存儲期,它在棧中存儲,需要顯式初始化。
  • 動態分配存儲期,即通過malloc分配內存的變量。它在堆中存儲,需要顯式初始。
  • 線程存儲期,從名字可以知道, 它與線程相關,使用關鍵字_Thread_local聲明的變量具有線程存儲期,它從聲明到線程結束一直存在。
  • 關于初始化,可參考《C語言入坑指南-被遺忘的初始化》。

同樣地,我們通過下面的代碼來更好地理解存儲期

  1. /**************************** 
  2. 作者:守望先生 
  3. 來源:公眾號編程珠璣 
  4. 個人博客:https://www.yanbinghu.com 
  5. ***************************************/ 
  6. #include <stdio.h> 
  7. int num1 = 222;         //靜態存儲期 
  8. static int num2 = 111;  //靜態存儲期 
  9. int add(int a,int b) 
  10.     static int tempSum = 0;  //靜態存儲期 
  11.     tempSum = tempSum + a + b; 
  12.     return tempSum; 
  13. int main(void) 
  14.     printf("num1=%d,num2=%d\n",num1,num2); 
  15.     int sum = 0;  //自動存儲期 
  16.     sum = add(num1,num2); 
  17.     printf("first time sum=%d\n",sum);//sum = 333 
  18.     sum = add(num1,num2); 
  19.     printf("second time sum=%d\n",sum); //sum = 666 
  20.     return 0; 

另外,如果我們通過nm命令查看編譯出來的程序文件的符號表,我們可以找到num1,num2,tempSum,而沒有sum,前者所用的內存數量在編譯時就確定了。

  1. $ gcc -g -o lifetime lifetime.c  
  2. $ nm lifetime|grep num1 
  3. 0000000000601038 D num1 
  4. $ nm lifetime|grep num2 
  5. 000000000060103c d num2 
  6. $ nm lifetime|grep tempSum 
  7. 0000000000601044 b tempSum.2289 
  8. $ nm lifetime|grep sum 

什么全局變量,局部變量,靜態局部變量,靜態全局變量

到這里,我們就可以很容易區分上面的變量類型了。實際上這里只是換了一種說法:

全局:具有文件作用域的變量

靜態:具有靜態存儲期或內部鏈接屬性

局部:具有函數或塊作用域的變量

因而結合起來,也就很好理解了。

  • 局部變量:函數或塊作用域的變量
  • 靜態局部變量:函數或塊作用域,靜態存儲期
  • 全局變量:具有文件作用域的變量
  • 靜態全局變量:內部鏈接屬性的,具有文件作用域的變量

當然,這僅僅是為了區分它們,這并不是它們的嚴格定義。更好的方法,是通過代碼來理解:

  1. #include <stdio.h> 
  2. int num1 = 222;         //全局變量 
  3. static int num2 = 111;  //靜態全局變量 
  4. int add(int a,int b) 
  5.     static int tempSum = 0;  //靜態局部變量 
  6.     tempSum = tempSum + a + b; 
  7.     return tempSum; 
  8. int main(void) 
  9.     printf("num1=%d,num2=%d\n",num1,num2); 
  10.     int sum = 0;  //局部變量 
  11.     sum = add(num1,num2); 
  12.     printf("first time sum=%d\n",sum);//sum = 333 
  13.     return 0; 

總結

本文總結如下:

  • 具有文件作用域的變量具有靜態存儲期,并且具有鏈接屬性
  • 不希望其他文件訪問的文件作用域變量最好使用static修飾
  • static關鍵字的含義需要結合上下文來理解
  • 如果可以,全局變量應該盡量避免使用,因為它可能帶來變量被意外修改
  • 使用動態內存通常比棧內存慢,但是棧內存很有限

參考

https://en.wikipedia.org/wiki/Global_variables

https://en.wikipedia.org/wiki/Local_variable

《C11標準文檔》

作者:守望,linux應用開發者,目前在公眾號【編程珠璣】分享Linux/C/C++/數據結構與算法/工具等原創技術文章和學習資源。

 

責任編輯:武曉燕 來源: 編程珠璣
相關推薦

2021-05-09 22:26:36

Python函數變量

2017-03-31 15:30:09

2020-02-15 15:33:55

Python如何運作

2022-04-07 08:37:05

鏈表技巧單鏈表

2021-05-27 21:18:56

谷歌Fuchsia OS操作系統

2020-03-30 09:22:03

AI語音技術機器視覺

2020-02-18 16:48:48

大腦CPU包裝

2018-06-08 10:12:10

Web緩存體系服務器

2021-03-11 15:49:44

人工智能深度學習

2022-05-30 08:05:11

架構

2012-05-28 10:06:05

項目開發項目管理開發

2021-03-19 14:12:24

2024-12-10 13:00:00

C++引用

2022-02-08 13:39:35

LinuxUNIX系統

2024-01-12 08:26:16

Linux磁盤文件系統

2019-10-29 09:41:54

Kafka分布式

2021-03-22 09:27:44

PythonEXCEL熱點推薦

2019-08-26 10:36:38

Python操作系統高考

2021-05-28 06:16:28

藍牙Wi-FiNFC

2021-04-28 11:35:06

Java框架日志
點贊
收藏

51CTO技術棧公眾號

成人网男人的天堂| 日韩电影在线观看完整免费观看| 中文字幕精品综合| 成人黄色片网站| 国产精品.www| re久久精品视频| 欧美一级在线免费| 18禁免费无码无遮挡不卡网站 | 欧美成人精品二区三区99精品| 日韩 欧美 视频| 成年人在线视频| 国产盗摄视频一区二区三区| 日韩av免费在线观看| 五月综合色婷婷| 人人香蕉久久| 欧美一区二区视频在线观看2020| 内射国产内射夫妻免费频道| 日本福利在线| 久久影院视频免费| 97中文在线观看| 伊人久久一区二区| 欧美综合二区| 久久久久久久久久婷婷| 久久精品三级视频| 久久精品色播| 日韩一区二区免费视频| 三级a在线观看| 三级中文字幕在线观看| 亚洲欧美激情小说另类| 日本一区视频在线| 日韩专区第一页| 国产老肥熟一区二区三区| 国产精品极品尤物在线观看 | 欧美卡1卡2卡| 茄子视频成人免费观看| 神马午夜伦理不卡 | 国产精品伊人| 在线影院国内精品| 男人日女人下面视频| 污影院在线观看| 日韩一区欧美一区| 亚洲一区影院| 91亚洲欧美| 久久精品男人天堂av| 精品国产一二| 日本xxxxwww| 成人深夜视频在线观看| 91最新国产视频| 91超薄丝袜肉丝一区二区| 强制捆绑调教一区二区| 国产成人自拍视频在线观看| 日韩精品无码一区二区| 伊人蜜桃色噜噜激情综合| 久久6精品影院| 久久久精品视频免费观看| 国产精品久久天天影视| 久久精品国产精品| 日韩在线视频网址| 女同性一区二区三区人了人一| y97精品国产97久久久久久| 三级黄色在线观看| 亚洲国产精品成人| 九九热精品在线| 久久免费小视频| 亚洲五月婷婷| 91成人在线播放| 日韩中文字幕在线观看视频| 久久久久久久波多野高潮日日| 国产极品jizzhd欧美| 波多野结衣在线观看视频| 男男视频亚洲欧美| 成人黄色av网站| 精品国产无码一区二区| 成人夜色视频网站在线观看| 国产日韩二区| 精彩国产在线| 中文字幕中文字幕在线一区 | 免费毛片在线播放免费 | 国内偷自视频区视频综合| 日韩av片在线播放| 久久aⅴ国产紧身牛仔裤| 国产精品第8页| 国产麻豆免费视频| 成人国产精品免费| 欧美一区二区三区在线播放| 欧美jizz18hd性欧美| 一区二区国产视频| 国产欧美高清在线| 亚洲狼人综合| 亚洲国模精品一区| 成人一级片免费看| 国内精品久久久久久久影视蜜臀| 91成人在线播放| 一区二区日韩视频| www.亚洲精品| 亚洲欧美日韩精品久久久| wwwav在线| 日韩欧美精品网址| 黄色aaaaaa| 日韩欧美美女在线观看| 日韩在线观看免费av| 国产大片aaa| 蜜乳av一区二区| 国产欧美韩日| 看黄网站在线观看| 欧美特黄级在线| 国产黄色一区二区三区| 免费成人高清在线视频theav| 久久精品久久久久久| 欧美激情亚洲综合| 久久国产精品色婷婷| 精品久久久久久一区二区里番| 中文字幕日本在线观看| 香蕉成人啪国产精品视频综合网 | 丰满亚洲少妇av| 亚洲看片网站| 成人性生活av| 欧美tk—视频vk| 亚洲国产123| 三级欧美韩日大片在线看| av成人综合网| 国产在线激情| 欧美视频完全免费看| 91黄色免费视频| 欧美啪啪一区| 国产日韩在线精品av| 免费av在线电影| 亚洲成人tv网| 一级黄色大片免费看| 色婷婷综合网| 国产国语刺激对白av不卡| 五月激情婷婷网| 亚洲一区二区综合| 超碰91在线播放| 久久国产精品亚洲人一区二区三区| 66m—66摸成人免费视频| 成人1区2区3区| 亚洲毛片av在线| 中文字幕免费高清在线| 久久国产精品亚洲人一区二区三区| 日韩美女在线看| 四虎影院在线域名免费观看| 亚洲成人精品影院| 亚洲av成人精品一区二区三区| 一区二区三区四区日韩| 92裸体在线视频网站| 日本中文字幕在线观看| 欧美日韩国产中文| 性爱在线免费视频| 蜜臀av国产精品久久久久| 日韩精品福利视频| 朝桐光一区二区| 夜夜嗨av色综合久久久综合网| 69亚洲精品久久久蜜桃小说| 国产午夜精品一区二区三区视频| 国产亚洲综合视频| 伊人春色之综合网| 国产精品va在线播放| 国产精品麻豆一区二区三区 | 天堂av.com| 性xxxx欧美老肥妇牲乱| 亚洲影视中文字幕| 怡红院在线播放| 精品国产一区二区三区不卡 | 日韩激情一区二区| 亚洲成人18| 亚州欧美在线| 欧美国产日韩中文字幕在线| 色wwwwww| 欧美性大战久久久久久久| www.黄色com| 国产精品一区二区在线看| 人妻激情另类乱人伦人妻| 福利电影一区| 国产成人精品av| 免费av毛片在线看| 日韩免费观看高清| 顶级黑人搡bbw搡bbbb搡| 国内精品免费**视频| 亚洲视频电影| 亚洲成av人片在线观看www| 欧美精品福利视频| 免费福利在线观看| 制服丝袜激情欧洲亚洲| 国产污视频在线观看| 久久九九99视频| 天天操夜夜操很很操| 一区二区激情| 亚洲一区二区三区免费看| 日韩欧美激情电影| 日本成人激情视频| 久草中文在线观看| 亚洲激情视频在线观看| 中文字字幕在线观看| 亚洲一区二区三区在线| 欧美大波大乳巨大乳| 国产乱码精品一区二区三区av | 91免费视频国产| 亚洲欧美视频一区二区| 欧美mv日韩mv国产网站| www.久久网| 亚洲综合另类小说| 国产视频三区四区| 成人午夜在线免费| 婷婷丁香激情网| 精品动漫一区| 亚洲一区二区三区欧美| 日韩av网站在线免费观看| 国产中文日韩欧美| 在线人成日本视频| 欧美精品在线免费观看| 成年人在线观看视频| 精品国产乱码久久久久久夜甘婷婷| 最新国产中文字幕| 欧美日韩在线看| 欧美成人精品欧美一级| 欧美国产日韩亚洲一区| 日韩av无码一区二区三区不卡 | 欧美日韩亚洲一区二区三区| 日韩一区二区不卡视频| 久久午夜电影网| xfplay5566色资源网站| 国产一区二区剧情av在线| 老头吃奶性行交视频| 一本色道久久综合亚洲精品高清| 日本一道在线观看| 国产精品7m凸凹视频分类| 日韩不卡av| 亚洲成a人片77777在线播放| 国产精品手机视频| 日韩精品一级| 亚洲综合在线播放| 99精品美女视频在线观看热舞 | 日本一区二区三区久久| 欧美丝袜美女中出在线| 在线观看免费国产视频| 香蕉久久一区二区不卡无毒影院 | 午夜激情视频在线观看| 亚洲天堂男人的天堂| 天堂中文在线8| 日韩av中文在线| 天天射天天色天天干| 亚洲国产精品va在看黑人| av网站免费大全| 日韩一卡二卡三卡四卡| 99久久久久久久| 日韩视频一区二区三区在线播放| 国产精品福利电影| 69精品人人人人| 国产视频第二页| 日韩免费视频线观看| www.97av.com| 亚洲成人久久一区| 色婷婷激情五月| 精品偷拍各种wc美女嘘嘘| 四虎精品在线| 亚洲午夜久久久久久久| 成人h小游戏| 俺去亚洲欧洲欧美日韩| 亚洲妇熟xxxx妇色黄| 国模精品视频一区二区三区| 台湾佬中文娱乐网欧美电影| 国产成人久久久精品一区| 日韩av黄色| 亚洲a级在线播放观看| 亚洲日本va中文字幕| 国产日韩欧美综合精品| 中文字幕av一区二区三区人| 五月天亚洲综合小说网| 91久久电影| av在线观看地址| 欧美亚洲三级| 一起操在线视频| 国产成人精品www牛牛影视| 午夜视频在线观看国产| 久久午夜电影网| 黄色一级大片在线免费观看| 亚洲一区二区偷拍精品| 天码人妻一区二区三区在线看| 91国偷自产一区二区三区成为亚洲经典 | 日韩一级成人av| 亚洲 美腿 欧美 偷拍| 一区二区在线视频| 中文在线观看免费| 2018日韩中文字幕| 日韩国产91| 激情视频一区二区| 99精品视频在线| 日本午夜激情视频| 蜜臀精品久久久久久蜜臀| 中文字幕第10页| 久久久噜噜噜久久中文字幕色伊伊 | 最新亚洲精品| 欧美xxxx吸乳| 日韩和欧美一区二区三区| 国产一级二级av| 国产偷v国产偷v亚洲高清| 欧美三根一起进三p| 色噜噜久久综合| 丰满肉嫩西川结衣av| 在线视频一区二区| 91超碰国产在线| 亚洲综合日韩在线| 精品一区二区三| 免费毛片网站在线观看| 另类小说视频一区二区| 五月开心播播网| 亚洲精品欧美综合四区| www.久久视频| 亚洲精品成a人在线观看| 国产三级在线播放| 国产成人在线精品| 九九热播视频在线精品6| 国产又大又长又粗又黄| 日韩精品亚洲专区| 女同毛片一区二区三区| 亚洲一区二区中文在线| 国产精品无码在线播放| 亚洲天堂久久av| 涩涩网在线视频| 国产chinese精品一区二区| 国产精品99一区二区三区| 成年人免费大片| 91亚洲精品久久久蜜桃网站 | 97人人模人人爽视频一区二区| jizzjizz欧美69巨大| 美女av免费在线观看| 不卡av电影在线播放| 欧美三级 欧美一级| 欧美久久久久久久久久| www.久久热.com| 国产精品老女人精品视频| 国产成人精品免费视| 黄色www网站| av高清不卡在线| 国产大片中文字幕在线观看| 欧美成人在线直播| 日本理论片午伦夜理片在线观看| 亚洲一区二区三区视频| 希岛爱理一区二区三区| 天天综合天天添夜夜添狠狠添| 中文字幕第一区综合| 最新中文字幕在线观看视频| 亚洲天堂开心观看| 成人精品国产| 手机在线观看国产精品| 奇米影视一区二区三区| 在线观看免费小视频| 欧美日韩色一区| 国产色在线观看| 99一区二区| a91a精品视频在线观看| 国产又黄又粗又猛又爽的视频| 日韩欧美国产一区二区| 国产成人天天5g影院在线观看| 国产精品视频免费在线观看| 天天天综合网| 亚洲AV成人精品| 精品电影在线观看| 国产中文在线视频| 国产美女精品视频免费观看| 久久久9色精品国产一区二区三区| 最好看的中文字幕| 欧美日韩国产精品一区| 黄色在线免费观看大全| 国产伦精品一区二区三区精品视频| 91超碰国产精品| 日本一区二区在线观看视频| 日韩欧美在线观看视频| eeuss影院www在线播放| 99久热re在线精品视频| 国产欧美高清| 国产传媒在线看| 日韩欧美国产综合| a日韩av网址| 在线视频不卡国产| 9i在线看片成人免费| 精品国产青草久久久久96| 不用播放器成人网| 免费观看成人www动漫视频| 高清一区在线观看| 一区二区高清免费观看影视大全| 色香蕉在线视频| 国产精品久久久久久搜索 | 内射无码专区久久亚洲| 国产不卡av在线免费观看| 一区二区三区在线观看免费| av无码av天天av天天爽| 欧美老肥妇做.爰bbww| 丁香高清在线观看完整电影视频| 欧美13一14另类| 久久xxxx| 精品国产国产综合精品| 国产视频丨精品|在线观看| 亚洲电影有码| 久色视频在线播放| 国产精品久久久久影院| 五月激情婷婷网| 91精品在线影院| 日韩在线卡一卡二|