從變數的宣告和定義看指標與const

2021-06-27 22:54:21 字數 1235 閱讀 1226

宣告和定義

在c++中支援分離式編譯所以c++講宣告和定義區分開來,宣告是使得名字為程式所知,定義負責建立於名字關聯的實體。變數宣告規定了變數的型別和名字,在這一點哈桑定義與之相同,此外定義還申請記憶體空間,也可能會為變數賦初值。

一條宣告語句由乙個基本資料型別和緊隨其後的乙個宣告符列表組成。每個宣告符命名了乙個變數並指定該變數是與基本資料型別有關的某種型別。

簡單的如

int a;

宣告符其實就是變數名,此時變數型別就是宣告的基本資料型別 int。

在復合型別的宣告定義中 如

int  *p;

int是基本資料型別,*p是宣告符,此宣告符命名了乙個變數p並指出這個變數p是與基本資料型別int有關的某種型別,這種關係是 p是整型指標。

int a;

int &r=i;

&r是宣告符,命名了變數r,變數r與基本資料型別int有關,關係是 r是整型引用。

再來看指標和const

指標常量(const pointer)和指向常量的指標(pointer to const)(我覺得記英文更有助於理解)這兩個是經常容易混淆的概念

int *const pt1;//指標常量(const pointer)

int const *pt2;//指向常量的指標(pointer to const

pt1是指標常量,不能改變其所指向的物件的內容,其本身的內容可以改變。pt2是常量指標,指標本身的值不能改變,但其所指物件的內容可以改變。

再從復合型別的宣告角度來看,從右向左讀第一句宣告語句。離pt1最近的是const  pt1先被限定為常量,宣告符*說明這個常量是乙個基本資料型別int的指標,這樣就能理解pt1是乙個常量指標,它本身是乙個常量,它是乙個指向整型的指標。

pt2是指向常量的指標。從右向左離pt2最近的是* 是宣告符的一部分,*說明pt2是指向基本資料型別的指標,再往前看 這個基本資料型別int 被const限定為常量,所以pt2是乙個指標,指向了乙個整型常量。

關於指標和const再加一點。 指向常量的指標不一定要指向乙個常量,而乙個常量必須要用乙個相應型別的指標來指。當乙個常量指標指向乙個非常量時,可以理解為它以為自己指向了乙個常量,並且按照對常量的操作規則來約束自己。

int a;

int const *p=&a;

a=5;

*p=5;//error l-value specifies const object   雖然a本身並不是常量 但不能通過指向常量的指標p來對其賦值。

變數的定義與宣告

1 變數的定義 從前面的章節可以看出,程式中所有的東西幾乎都有名字。然而字面量卻是個例外,它沒有名字。那麼使用變數,我們就可以為某個值取名字了。實際上,我們是為系統記憶體中用於儲存資料的某塊空間取名字。ansi c規定 變數必須 先定義 後使用 因此當用c定義變數時,不僅需要指定變數名,而且還必須告...

變數的定義與宣告

我們在程式設計中,時時刻刻都用到變數的定義和變數的宣告,可有些時候我們對這個概念不是很清楚,知道它是怎麼用,但卻不知是怎麼一會事,下面我就簡單的把他們的區別介紹如下 望我的指點對你受益 變數的宣告有兩種情況 1 一種是需要建立儲存空間的。例如 int a 在宣告的時候就已經建立了儲存空間。2 另一種...

變數的宣告與定義

請看下邊小程式 1 int i 定義性宣告 defining declaration 或定義 definition 2extern int j 引用性宣告 referencing declaration 3int k nullptr 定義性宣告 defining declaration 很明顯,上述...