
一般變量聲明成const,規(guī)定其值不被程序改變。
指針變量復(fù)雜一些。
它包括兩個方面:
1 指針變量包含的指針不被程序改變。
2 指針變量包含的指針指向的地址中的值不能通過指針來改變(可以通過它本身的變量名來改變)。
我們可以聲明成單獨具有1的功能,單獨具有2的功能,或者兼有1、2的功能。
假設(shè)前面有語句:
Char c=’X’;
1 指針變量包含的指針不被程序改變(const在后面)
char * const charPtr = &c;
這樣定義,說明charPtr中包含的指針,就是c的地址,不能再改變。
下面的語句就是錯誤的:
charPtr = &d;
2 指針變量包含的指針指向的地址中的值不能通過指針來改變(const在前面)
const char *charPtr = &c;
CharPtr指向的地址是c的地址,所以c的值就不能通過指針變量charPtr來改變。
下面的語句就是錯誤的:
*charPtr = 'Y';
但下面的語句是正確的:
c=’Y’;
把char *看成一個整體,則兩個定義的區(qū)別是const在char *的前面還是后面。
如果在后面,就是定義1,指針變量中存放的指針不能改變。
如果在前面,則指針變量指向的地址中的值,不能通過指針變量來改變。
也可以這樣來記:
定義中變量與*分離,則變量不能作左值。
定義中變量與*挨著,則*變量不能作左值。
3 同時具有兩個功能
const char * const *charPtr = &c;
里面有兩個*號和兩個const。
這樣來記:
兩個const夾著char *,然后變量前面還有一個*。