變數可以分為全域性變數、靜態全域性變數、區域性變數和靜態區域性變數
變數的宣告有兩種情況:
1、一種是需要建立儲存空間的(定義性宣告)。例如int a 在生命的時候就已經建立了儲存空間。
2、另一種是不需要建立儲存空間的(引用性宣告)。例如extern int a 其中變數a是在別的檔案中定義的。
記憶體區域的劃分:
1、棧區:由編譯器自動分配和釋放的記憶體區域,用於存放函式的引數值、區域性變數等。
2、堆區:程式設計師向系統申請或釋放。
3、全域性區:用來儲存全域性變數和靜態變數。
4、文字常量區:用來儲存常量字串的記憶體區域。
5、程式**區:用來儲存函式體的二進位制**。
先看乙個例子:
fileone.h標頭檔案如下:
#ifndef dmtestvariable_fileone_h
#define dmtestvariable_fileone_h
// 宣告全域性變數
extern int globalvariable;
void addone();
void teststaticglobal();
#endif
fileone.c檔案如下:
#include
#include "fileone.h"
// 靜態全域性變數
static int staticglobalvariable = 12;
void addone()
void teststaticglobal()
main.c檔案如下:
#include
#include "fileone.h"
// 定義性宣告全域性變數
int globalvariable = 10;
void test()
int main(int argc, const char * argv)
// 靜態全域性變數
for (int i = 0 ; i < 2; i++)
return 0;
}輸出結果如下:
總結如下:
全域性變數,具有全域性作用域,只需在乙個原始檔中定義,就可以作用於所有的原始檔,當然其他不包含全域性變數定義的原始檔需要用extern關鍵字再次宣告這個全域性變數,如**中的
// 定義性宣告全域性變數
int globalvariable = 10;
全域性變數,定義在main.c原始檔中,在fileone.c原始檔中使用時有以下**再次宣告
// 宣告全域性變數
extern int globalvariable;
靜態全域性變數,只能在其所在檔案模組中的函式中使用,其他檔案模組中的函式不能訪問。如**中的
// 靜態全域性變數
static int staticglobalvariable = 12;
只能在fileone.c原始檔中使用,不能在main.c原始檔中使用。
區域性變數:只能在定義該變數的函式體內使用。如**中的
// 區域性變數測試
int localvariable = 15;
只能在main函式中使用。
靜態區域性變數:在函式內定義,但當函式退出後,靜態區域性變數始終存在,其占用的記憶體單元不會被釋放,直到程式結束時才被釋放。退出函式後儘管該靜態區域性變數還存在,但是不能使用它,如果再次呼叫定義該靜態區域性變數的函式,它又可以繼續使用,而且儲存了上次呼叫之後留下的值。如**中的
// 靜態區域性變數
static int staticlocalvariable = 20;
第一次呼叫test()函式輸出的此靜態區域性變數值為21,第二次呼叫函式test()輸出的此靜態區域性變數值為22。
c++ primer plus 第6版 中文版 清晰有書籤pdf+源**
讀c++ primer 之建構函式陷阱
讀c++ primer 之智慧型指標
讀c++ primer 之控制代碼類
將c語言梳理一下,分布在以下10個章節中:
linux-c成長之路(一):linux下c程式設計概要
linux-c成長之路(二):基本資料型別
linux-c成長之路(三):基本io函式操作
linux-c成長之路(四):運算子
linux-c成長之路(五):控制流
linux-c成長之路(六):函式要義
linux-c成長之路(七):陣列與指標
linux-c成長之路(八):儲存類,動態記憶體
linux-c成長之路(九):復合資料型別
linux-c成長之路(十):其他高階議題
本文永久更新鏈結位址:
C語言之變數的儲存方式和生存週期
首先明確一下變數的劃分方式。根據變數的作用域,可以劃分為 區域性變數,全域性變數 根據生存週期,可以劃分為 靜態儲存方式,動態儲存方式 include int main int a,b,c 定義外部變數abc,因為是在函式外部定義的所以是外部變數,但是其作用範圍是從此處至之後的函式,main函式在其...
C語言之變數屬性
1.c語言的變數屬性 c語言中的變數可以有自己的屬性 在定義變數的時候可以加上 屬性 關鍵字 屬性 關鍵字指明變數的特有意義 語法 property type var name 示例 2.auto關鍵字 auto即c語言中區域性變數的預設屬性 auto表明將被修飾的變數儲存於棧上 編譯器預設所有的區...
著色器語言之變數型別
在看shader程式的時候,會發現在變數型別的前面總是會有些不同的單詞符號,包括了uniform,attribute,varing,in,out一系列 接下來對這些東西進行乙個總結 屬性限定符attribute用來定義一些特殊的變數,這些變數的值可以由應用程式提供,通過opengl es傳遞給頂點著...