extern 關鍵字宣告變數或者函式為外部變數或函式。表示變數或者函式體在外部檔案被定義。編譯器遇到此申明會到其他模組中尋找改函式體或變數。
static 申明變數或函式為靜態;靜態的函式或者變數使該變數或者函式只能作用於本檔案。通俗點講就是,只能是本檔案內部使用,其他檔案哪怕是定義乙個相同的都與我無關,編譯器也不會報錯。這也是其好處;未經初始化的靜態變數初值都為0;靜態變數都再全域性資料區儲存;包括靜態全域性變數,靜態區域性變數;
在記憶體中的分布情況如下:
**區 //low address
全域性資料區
堆區棧區 //high address
一般程式把新產生的動態資料
存放在堆區,函式內部的自動變數
存放在棧區。自動變數一般會隨著函式的退出而釋放空間,靜態資料(即使是函式內部的靜 態區域性變數)也存放在全域性資料區。全域性資料區的資料並不會因為函式的退出而釋放空間。
靜態區域性變數有以下特點:
該變數在全域性資料區分配記憶體;
靜態區域性變數在程式執行到該物件的宣告處時被首次初始化,即以後的函式呼叫不再進行初始化;
靜態區域性變數一般在宣告處初始化,如果沒有顯式初始化,會被程式自動初始化為0;
靜態函式:
在函式的返回型別前加上static關鍵字,函式即被定義為靜態函式。靜態函式與普通函式不同,它只能在宣告它的檔案當中可見,不能被其它檔案使用。
對於非靜態資料成員,每個類物件都有自己的拷貝。而靜態資料成員被當作是類的成員。無論這個類的物件被定義了多少個,靜態資料成員在程式中也只有乙份拷 貝,由該型別的所有物件共享訪問。也就是說,靜態資料成員是該類的所有物件所共有的。對該類的多個物件來說,靜態資料成員只分配一次記憶體,供所有物件共 用。所以,靜態資料成員的值對每個物件都是一樣的,它的值可以更新。靜態的類資料成員分配在全域性區,哪怕是該類沒有例項化乙個物件,我們都可以訪問它;靜態成員之間可以相互訪問,包括靜態成員函式訪問靜態資料成員和訪問靜態成員函式;
非靜態成員函式可以任意地訪問靜態成員函式和靜態資料成員;
靜態成員函式不能訪問非靜態成員函式和非靜態資料成員;
eg:1.cpp中定義char a;如果想在2.cpp中使用,那麼2,cpp中使用時,這麼用extern char a;
如果定義char a[5];定義乙個陣列,在 2.cpp中要要使用該數字,那麼必須這麼宣告 extern char a; 如果是申明為extern char *a;會出錯,原因是extern char *a,只告訴編譯器有乙個外部的指向字串的指標。宣告可以多次使用,可以在多個檔案中使用。int a ,與extern int a ,乙個是定義乙個變數,乙個是申明乙個變數,大爺的。細節啊;全部交給大學老師了.......汗
在乙個檔案中定義乙個函式,宣告為外部extern
eg: 1.cpp中定義如下函式:
#include "stdafx.h"
#include"iostream"
using namespace std;
//extern static my aa;
//extern static my bb; //如果申明為static 則有錯誤;
extern my aa; // 在2.cpp中定義的全域性變數
extern my bb; //
void fun()
{ cout<<"test static aa:"<
在2.cpp中定義了
#pragma once
#include "stdafx.h"
#include"iostream"
using namespace std;
my aa,bb; // 定義兩個全域性自定義的結構體。在stdafx,h中
//static my aa,bb; //如果是靜態的,則,fun()函式裡的變數永遠都是0,不會隨2.cpp賦值而改變;
extern int temp1;
extern void fun();
int _tmain(int argc, _tchar* argv)
{ bb.a =1;
bb.b =1;
aa.a =0;
aa.b=0;
cout<
Linux裡stat命令與stat和lstat函式
1.stat命令,可以獲取檔案的詳細資訊 命令列輸入 stat filename 2.stat函式 標頭檔案 include include include 介面 extern int stat const char restrict file,struct stat restrict buf 引數...
Linux許可權管理和Stat
檔案訪問者的分類 檔案和檔案目錄的所有者 u user 檔案和檔案目錄的所有者所在的組的使用者 g group 其它使用者 o others 檔案訪問許可權的種類 事物屬性 讀 r 對檔案而言,具有讀取檔案內容的許可權 對目 錄來說,具有瀏覽該目錄資訊的許可權 寫 w write對檔案而言,具有修改...
Ajax的readyState和status屬性
readystate屬性包括五種可能的取值 0 未初始化 send方法還沒有被呼叫 1 載入中 已呼叫了send方法,請求還在處理 2 已載入 send方法已完成,整個應答已接收 3 互動中 正在解析應答 4 已完成 應答已經解析,準備好進行下一步處理。物件xmlhttprequest 屬性stat...