c++靜態(tài)局部變量和靜態(tài)函數示例
在函數體內定義了一個變量,每當程序運行到該語句時都會給該局部變量分配棧內存。但隨著程序退出函數體,系統(tǒng)就會收回棧內存,局部變量也相應失效。但有的時候我們需要在兩次調用之間對變量的值進行保存。通常的想法是定義一個全局變量來實現。但是這樣一來,變量已經不再屬于函數本身了,不再僅受函數的控制,給程序的維護帶來不便。靜態(tài)局部變量正好可以解決這個問題。靜態(tài)局部變量保存在全局數據區(qū),而不是保存在棧中,每次的值保持到下一次調用,直到下次賦新值。該變量在全局數據區(qū)內分配內存;靜態(tài)局部變量在程序執(zhí)行到該對象的聲明處時被首次初始化,即以后的函數調用不再進行初始化(這一點非常的重要);靜態(tài)局部變量一般在聲明處初始化,如果沒有顯式初始化,會被程序自動初始化為0;它始終駐留在全局數據區(qū),直到程序運行結束。但其作用域為局部作用域,當定義它的函數或語句塊結束時,其作用域隨之結束;靜態(tài)函數主要是用來訪問靜態(tài)成員,不能直接訪問類的非靜態(tài)成員;靜態(tài)成員函數主要為了調用方便,不需要生成對象就能調用。比如
class X
{
public:
void MethodA();
static void MethodB();
}
此時MethodB可以直接調用,X::MethodB();
而MethodA必須在先生成類對象之后才能夠被調用,X x; x.MethodA();
//Example 3
#include <iostream.h>
void fn();
void main() {
fn(); fn(); fn();
}
void fn() {
static int n=10; //僅在初次調用它的時候被初始化,第二次調用的時候這句話就被忽略
cout<<n<<endl;
n++;
}
上一篇:stl常用算法(Algorithms)介紹(stl排序算法、非變序型隊列)
欄 目:C語言
下一篇:qt實現倒計時示例
本文標題:c++靜態(tài)局部變量和靜態(tài)函數示例
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/3661.html
您可能感興趣的文章
- 04-02c語言沒有round函數 round c語言
- 01-10深入理解C++中常見的關鍵字含義
- 01-10使用C++實現全排列算法的方法詳解
- 01-10c++中inline的用法分析
- 01-10用C++實現DBSCAN聚類算法
- 01-10全排列算法的非遞歸實現與遞歸實現的方法(C++)
- 01-10C++大數模板(推薦)
- 01-10淺談C/C++中的static與extern關鍵字的使用詳解
- 01-10深入C/C++浮點數在內存中的存儲方式詳解
- 01-10深入理解C/C++混合編程


閱讀排行
本欄相關
- 04-02c語言函數調用后清空內存 c語言調用
- 04-02func函數+在C語言 func函數在c語言中
- 04-02c語言的正則匹配函數 c語言正則表達
- 04-02c語言用函數寫分段 用c語言表示分段
- 04-02c語言中對數函數的表達式 c語言中對
- 04-02c語言編寫函數冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數 round c語言
- 04-02c語言分段函數怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數 c語言中怎
- 04-02c語言調用函數求fibo C語言調用函數求
隨機閱讀
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11ajax實現頁面的局部加載
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢)副欄目數量限制代碼修改
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實例總結
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文