C 變數 常量 符號常量

2022-09-01 20:12:12 字數 2352 閱讀 1880

變數:

int i = 0;  // i 是變數

i=5;         //i 可以修改

變數就是程式內乙個記憶體位置的符號名,在該記憶體位置可以儲存資料,並可以通過符號名對該記憶體位址存放的資料進行訪問。

變數的值可以修改,是可變的,但在某個確定的時刻,變數的值是確定的,並一直保持到下次被修改之前。 

常量:

int a=10;       //a 是變數, 10 是常量,也是整形常量

double  b= 3.5;  //b是變數, 3.5 這個數是常量,也叫浮點型常量

char c= 'a' ;  //c是變數,  『a』 是字元常量

std::string  str ="1234";   // str 是變數, 「1234」是字串常量

上面這四種常量都叫做普通常量,也稱之為字面值常量。

字面值常量在程式中是直接表示的,整型直接寫出大小,字元直接寫出字元 ,如上面的10 和 『a 』 

乙個字面值常量在編譯時被直接解析為立即數,編譯器內部維護字面值常量的型別,

以前一直以為const修飾的變數是常量,既對,也錯,應該稱為  符號常量

const int   i = 10 ; // i 是const 修飾的,i本身是變數, 但是被const 修飾後變成了符號常量,不可修改

//當然,10 還是常量,也是字面值常量 ,而 i  是符號常量,和普通常量不一樣的是,符號常量有乙個名稱,既i , 而普通常量也就是字面值常量是沒有名稱的

符號常量的定義的兩種方式:#define  和const 

#define a 10  

const int b=10;

不同之處在於: 

a. 巨集定義: 由預處理處理,單純的是純文字替換。 

b. const常量: 由c++編譯器處理,提供型別檢查和作用域檢查。

ps:建議把常量定義為大寫形式

常量儲存在什麼地方:

乙個由c/c++編譯的程式占用的記憶體分為以下幾個部分 

1、棧區(stack)— 由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。 

2、堆區(heap) — 一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os** 

3、全域性(靜態)區(static):

全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。 - 程式結束後有系統釋放 

4、文字常量區—常量字串就是放在這裡的。 程式結束後由系統釋放 

5、程式**區—存放函式體的二進位制**。

例子程式: 

#include

using namespace std;

int a = 0;                                 全域性(靜態)初始化區 

char *p1;                                 全域性(靜態)未初始化區 

int  main() 

重點有兩個:

1.為什麼  int b=10;   10這個常量 沒有放在文字常量區,不是說常量都放在這裡嗎?

這是因為編譯器認為普通的整型、浮點型或字元型常量在使用的時候是可以通過立即數來實現的,沒有必要額外儲存到資料區,如此節省了儲存空間和執行時的訪問時間

2.那麼什麼樣的資料才將放入常量區呢?

第一就是」12345「 這樣的字串常量,但是要除掉字元陣列賦值的常量

第二就是被const修飾的全域性變數

除了字串之外,其他常量也可以放在常量區,但是前提是該資料必須被存放在全域性變數的空間裡,並且被const關鍵字修飾。如下:

#includeusing namespace std;

const int v0=5; //5這個常量在常量區,因為是全域性const, v0在全域性(靜態)初始化區 

const char c='t'; //'t'這個常量在常量區,因為是全域性const, c在全域性(靜態)初始化區 

int v1=6; //6這個常量是立即數,沒有存在任何地方 ,v1在全域性(靜態)初始化區 

int main()

至於為什麼?要好好學習彙編,看看編譯器到底做了什麼?

參考:

C 常量 符號變數 常變數

常量分為數值型常量 即常數 和字元型常量。例如 12,5,0為整形常量,6.2,2.3為實型常量 包含在兩個單撇號之間的字元為字元常量,如 a x 注 字元常量只包括乙個字元,如 ab 是不合法的 字元常量區分大小寫字母,如 a 和 a 是兩個不同的字元常量 撇號 是定界符,而不屬於字元常量的一部分...

C 符號常量

一,const限定符 使用const關鍵字來建立符號常量,常量被建立後其值就固定了,編譯器將不允許修改該常量的值。const int a 20 注意,應在宣告時對const進行初始化,如果在宣告常量時沒有提供值,則該常量的值將是不確定的,且無法修改。二,使用enum建立符號常量 a,使用enum定義...

符號常量 C

標頭檔案climits定義了符號常量,包含與下面類似的語句行 define int max 32767 沒有分號哦 define myfunc x x 1 在c 編譯過程中,首先將源 傳遞給預處理器。這裡 define和 include一樣,是乙個預處理器編譯指令。const常量被初始化後,其值就被...