變數:
int i = 0; // i 是變數變數就是程式內乙個記憶體位置的符號名,在該記憶體位置可以儲存資料,並可以通過符號名對該記憶體位址存放的資料進行訪問。i=5; //i 可以修改
變數的值可以修改,是可變的,但在某個確定的時刻,變數的值是確定的,並一直保持到下次被修改之前。
常量:
int a=10; //a 是變數, 10 是常量,也是整形常量以前一直以為const修飾的變數是常量,既對,也錯,應該稱為 符號常量double b= 3.5; //b是變數, 3.5 這個數是常量,也叫浮點型常量
char c= 'a' ; //c是變數, 『a』 是字元常量
std::string str ="1234"; // str 是變數, 「1234」是字串常量
上面這四種常量都叫做普通常量,也稱之為字面值常量。
字面值常量在程式中是直接表示的,整型直接寫出大小,字元直接寫出字元 ,如上面的10 和 『a 』
乙個字面值常量在編譯時被直接解析為立即數,編譯器內部維護字面值常量的型別,
const int i = 10 ; // i 是const 修飾的,i本身是變數, 但是被const 修飾後變成了符號常量,不可修改符號常量的定義的兩種方式:#define 和const//當然,10 還是常量,也是字面值常量 ,而 i 是符號常量,和普通常量不一樣的是,符號常量有乙個名稱,既i , 而普通常量也就是字面值常量是沒有名稱的
#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常量被初始化後,其值就被...