C語言之變數型別和儲存方式

2021-07-25 19:04:58 字數 2467 閱讀 1472

變數可以分為全域性變數、靜態全域性變數、區域性變數和靜態區域性變數

變數的宣告有兩種情況:

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傳遞給頂點著...