static:
一、在C或OC中,static主要定義全局靜態(tài)變量、定義局部靜態(tài)變量、定義靜態(tài)函數(shù)。
-
1、定義全局靜態(tài)變量:在全局變量前面加上關鍵字static,該全局變量變成了全局靜態(tài)變量。全局靜態(tài)變量有以下特點:
a.在全局(靜態(tài))數(shù)據(jù)區(qū)分配內(nèi)存。 b.如果沒有初始化,其默認值為0. c.該變量只能在當下文件使用(起隱藏全局變量可見范圍的作用)。
2、定義局部靜態(tài)變量:在局部變量前面加上關鍵字static,其特點如下:
a.該變量在全局(靜態(tài))數(shù)據(jù)區(qū)分配內(nèi)存(程序運行時即分配內(nèi)存), 只初始化一次.
b.它始終駐留在全局(靜態(tài))數(shù)據(jù)區(qū),直到程序運行結束,每次訪問這個變量時改變是同一個內(nèi)存中的值。
c. 其作用域為局部作用域,當定義它的函數(shù)或語句塊結束時,其作用域隨之結束。-
3、定義靜態(tài)函數(shù):在函數(shù)返回類型前加上static關鍵字,函數(shù)即被定義為靜態(tài)函數(shù),其特點如下:
a.靜態(tài)函數(shù)只能在本源文件中使用 b.在文件作用域中聲明的inline函數(shù)默認為static類型
-
4 在類中static變量:
a. static變量屬于本類,不同的類對應的是不同的對象
b.static變量所在同一個類的所有對象中共享,只初始化一次
c. oc沒有靜態(tài)類成員屬性|
局部變量又叫自動變量,是在函數(shù)內(nèi)部聲明或定義的,函數(shù)退出后就自動消失了。全局變量是在函數(shù)外部定義的,要到程序結束后才能消失。靜態(tài)變量也只有局部和全局兩種情況,但無論哪一種情況,它的值是永久存在的,直到程序結束時才消失。不過它的可見性與相應的自動變量一樣,即局部靜態(tài)變量的可見性是函數(shù),而全局靜態(tài)變量的可見性是程序。OC的全局靜態(tài)變量的可見性只在該類,除非用類方法返回該對象,其他類才能調用.
二、在C++中新增了兩種作用:定義靜態(tài)數(shù)據(jù)成員或靜態(tài)函數(shù)成員。
- 定義靜態(tài)數(shù)據(jù)成員。
a.內(nèi)存分配:靜態(tài)數(shù)據(jù)成員在程序的全局數(shù)據(jù)去分配。
b.初始化和定義:靜態(tài)數(shù)據(jù)成員定義時要分配空間,所以不能在類聲明中定義。
靜態(tài)數(shù)據(jù)成員因為程序以開始運行就必須存在,所以其初始化的最佳位置在類的內(nèi)部,public、protected、private關鍵字對它的限定和普通數(shù)據(jù)成員一樣,因為其空間在全局數(shù)據(jù)分配,屬于所有本類的對象共享。它不屬于特定的類對象,在沒產(chǎn)生類對象時,其作用域可見,即沒有產(chǎn)生類的實例時,就可以操作它了。
靜態(tài)成員函數(shù)。靜態(tài)成員函數(shù)與類相聯(lián)系,不與類的對象相聯(lián)系。靜態(tài)成員函數(shù)不能訪問非靜態(tài)數(shù)據(jù)成員。
extern:
extern可以置于變量或函數(shù)前,以在別的文件中標識變量或函數(shù)的定義,并提示編譯器遇到此變量或函數(shù)時在其他模塊中尋找其定義。extern是C、C++語言中表明函數(shù)和全局變量作用范圍(可見性)的關鍵字。
對于extern變量來說,僅僅是一個**變量的聲明**,其并**不是定義**,不會分配內(nèi)存空間。
extern表示將變量或函數(shù)**聲明**為外部鏈接,變量默認是內(nèi)部鏈接,函數(shù)默認是外部鏈接。因此用來外部鏈接的函數(shù),聲明時有無extern都可以連接通過。而全局變量則不行。通常,在模塊的頭文件中,對本模塊提供給其他模塊引用的函數(shù)和全局變量以關鍵字extern聲明。
- 注意點:extern不能用來定義變量,當然也不能初始化變量.可以external int a;但是不能external