C 基礎知識(常量)

2021-09-21 17:42:26 字數 1845 閱讀 1167

const用於限定乙個變數不允許改變。

c語言中const是偽常量,可通過指標進行修改,預設為外連線,通常會分配記憶體空間;

main.c

#define _crt_secure_no_warnings

#include#include#includeint main(void)

test.c

const int a = 10; //c語言中,預設const為外部鏈結
c++中const會放入符號表中,預設為內連線,不一定分配記憶體空間。

main.cpp

#define _crt_secure_no_warnings

#includeusing namespace std;

int main(void)

test.cpp

extern const int a = 10; //c++預設const為內部鏈結,加上extern,提高作用域
c/c++中const異同對比

作用範圍

儲存記憶體

c全域性const

唯讀資料段

宣告為extern或對變數取位址時,編譯器會分配儲存位址,不可修改。

區域性const

堆疊段分配記憶體,可通過指標間接修改

c++依賴於如何使用

注意:如果c**現兩個檔案中都包含const int a時,編譯器會報重定義錯誤,而在c++中則不會報錯,因為c++中是預設內部連線,如果想讓c++中的const具有外部連線,必須顯式宣告為:extern const int a=10;

只要const修飾分配記憶體,可以通過間接方式進行修改

c++中對於區域性的const變數要區別對待:

1、對於基礎資料型別,也就是const int a = 10這種,編譯器會把它放到符號表中,不分配記憶體,當對其取位址時,會分配記憶體。

2、對於基礎資料型別,如果用乙個變數初始化const變數,如果const int a = b,那麼也是會給a分配記憶體。

3、對於自定資料型別,比如類物件,那麼也會分配記憶體。

#define _crt_secure_no_warnings

#include#includeusing namespace std;

//1、const分配記憶體 變數取位址會分配臨時記憶體

//2、extern關鍵字下編譯器也會給const變數分配記憶體

void test01()

//3、用普通變數初始化const的變數

void test02()

//4、自定義資料型別 加const也會分配記憶體

struct person

;void test03()

int main(void)

注意:

在c中,編譯器對待const如同對待變數一樣,只不過帶有乙個特殊的標記,意思是「你不能改變我」;在c++中定義const時,編譯器為他建立空間,所以如果兩個不同檔案中定義多個同名的const,鏈結器就會發生鏈結錯誤,簡而言之,在c++中,const用的更好。首先,它能夠明確指定型別。其次,可以使用c++的作用域規則將定義限制在特定的函式或檔案中。第三,可以將const用於更複雜的型別。

盡量以const替換define,兩者的區別在於:

1、const有型別,可進行編譯器型別安全檢查,#define無型別,不可進行型別檢查。

2、const有作用域,而define不重視作用域,預設定義處到檔案結尾,如果定義在指定作用域下有效的常量,那麼#define就不能用。

C 基礎知識 變數與常量

1.定義變數的語法 資料型別 變數名 定義乙個年齡的變數,年齡是整數,所以變數定義如下 int age 系統會根據資料型別,在記憶體中分配不同大小的儲存空間 每個資料型別後面,可以定義多個變數,如 定義姓名 家庭位址 籍貫 民族 string name,address,origin,national...

C 基礎知識

抽象類 abstract class 一種不可以被例項化的類。抽象類中一般含有抽象方法,當然也可有具體實現。繼承類只有實現過所有抽象類的抽象方法後才能被例項化。介面 inte ce 只含有共有抽象方法 public abstract method 的類。這些方法必須在子類中被實現。反射 程式集包含模...

c 基礎知識

或運算的意義是什麼 0 0 0 0 1 1 1 0 1 1 1 1 無進製與運算的意義是什麼 在vc中,視窗的每個屬性對應乙個只有一位為1的16位的二進位制數,當增加某屬性做或運算 即可,取消某個屬性只需與 上這個屬性的取反。cs.style ws maximizebox 和cs.style cs....