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....