六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

C語言之static辨析

[摘要]1、概述  static 聲明的變量在C語言中有兩方面的特征:  1)、變量會被放在程序的全局存儲區中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它與堆棧變量和堆變量的區別。  2)、變量用static告知編譯器,自己僅僅在變量的作用范圍內可見。這一點是它與全局變量的區別。  2、問...

  1、概述

  static 聲明的變量在C語言中有兩方面的特征:

  1)、變量會被放在程序的全局存儲區中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它與堆棧變量和堆變量的區別。


  2)、變量用static告知編譯器,自己僅僅在變量的作用范圍內可見。這一點是它與全局變量的區別。

  2、問題:Static的理解

  關于static變量,請選擇下面所有說法正確的內容:

  A、若全局變量僅在單個C文件中訪問,則可以將這個變量修改為靜態全局變量,以降低模塊間的耦合度;

  B、若全局變量僅由單個函數訪問,則可以將這個變量改為該函數的靜態局部變量,以降低模塊間的耦合度;

  C、設計和使用訪問動態全局變量、靜態全局變量、靜態局部變量的函數時,需要考慮重入問題;

  D、靜態全局變量過大,可那會導致堆棧溢出。

  答案與分析:

  對于A,B:根據本篇概述部分的說明b),我們知道,A,B都是正確的。

  對于C:根據本篇概述部分的說明a),我們知道,C是正確的(所謂的函數重入問題,下面會詳細闡述)。

  對于D:靜態變量放在程序的全局數據區,而不是在堆棧中分配,所以不可能導致堆棧溢出,D是錯誤的。

  因此,答案是A、B、C。

  3、問題:不可重入函數

  曾經設計過如下一個函數,在代碼檢視的時候被提醒有bug,因為這個函數是不可重入的,為什么?

unsigned int sum_int( unsigned int base )
{
 unsigned int index;
 static unsigned int sum = 0; // 注意,是static類型的。
 for (index = 1; index <= base; index++)
 {
  sum += index;
 }
 return sum;
}

  答案與分析:

  所謂的函數是可重入的(也可以說是可預測的),即:只要輸入數據相同就應產生相同的輸出。

  這個函數之所以是不可預測的,就是因為函數中使用了static變量,因為static變量的特征,這樣的函數被稱為:帶“內部存儲器”功能的的函數。因此如果我們需要一個可重入的函數,那么,我們一定要避免函數中使用static變量,這種函數中的static變量,使用原則是,能不用盡量不用。

  將上面的函數修改為可重入的函數很簡單,只要將聲明sum變量中的static關鍵字去掉,變量sum即變為一個auto 類型的變量,函數即變為一個可重入的函數。

  當然,有些時候,在函數中是必須要使用static變量的,比如當某函數的返回值為指針類型時,則必須是static的局部變量的地址作為返回值,若為auto類型,則返回為錯指針。



相關文章

主站蜘蛛池模板: 日韩免费在线视频观看 | 在线看欧美成人中文字幕视频 | 五月激情六月 | 午夜免费看视频 | 日韩城人网 | 日本剧情片免费观看网址 | 无人在线观看完整免费版视频 | 日本三级视频在线观看 | 天天噜天天射 | 日韩视频免费观看 | 日本无卡码免费一区二区三区 | 亚洲国产欧美在线人成精品一区二区 | 日日夜夜免费视频 | 中文天堂在线最新版在线www | 天天影视色香欲综合免费 | 亚洲第一精品夜夜躁人人爽 | 中文字幕在线第一页 | 亚洲国产高清在线精品一区 | 一二三四影院免费观看 | 日韩中文字幕视频在线 | 日产久久| 欧美一区二区三 | 色爱综合区 | 四色婷婷婷婷色婷婷开心网 | 亚洲va久久久噜噜噜久久狠狠 | 欧美一级第一免费高清 | 日本不卡免费新一二三区 | 综合99| 亚洲一区综合在线播放 | 青娱乐国产 | 亚洲第一黄色网 | 亚洲人成在线播放 | 亚洲精品中文字幕乱码影院 | 在线免费福利 | 日韩午夜伦 | 日本欧美不卡一区二区三区在线 | 午夜欧美视频 | 欧美系列在线播放 | 亚洲第一免费视频 | 天干天干天啪啪夜爽爽色 | 亚洲激情另类小说 |