人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

水滴石穿C語言之static辨析

水滴石穿C語言之static辨析

更新時間:2022-08-02 文章作者:未知 信息來源:網絡 閱讀次數:


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類型,則返回為錯指針。


溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 乌兰浩特市| 云和县| 宝鸡市| 罗平县| 鲁山县| 易门县| 驻马店市| 娄烦县| 贵港市| 信阳市| 贵定县| 安塞县| 东山县| 丰台区| 龙陵县| 阿瓦提县| 获嘉县| 大丰市| 遵义市| 海盐县| 昌宁县| 蒲城县| 曲周县| 塔河县| 色达县| 太仆寺旗| 鹰潭市| 年辖:市辖区| 全椒县| 白沙| 南陵县| 浦城县| 孝昌县| 潜江市| 子洲县| 甘孜县| 灵川县| 凤山县| 湘潭市| 伊宁市| 万山特区|