1. 程式人生 > >const關鍵字解析,絕對搞定該關鍵字!

const關鍵字解析,絕對搞定該關鍵字!

const是C中的一個關鍵字,從我使用C語言開始,直到最近才真正地理解了這個關鍵字的種種變化的實質,現在就將該變化實質分享。

const int a = 10;

int b = 20;

int c = 30;

int d = 40;

int e = 50;

const int *p1 =&b;

int const * p2 = &c;

int * const p3 = &d;

const int * const p4 = &e;

解決技巧:將型別變數去掉,const修飾誰,誰就不可以變。const *修飾的是記憶體中的內容,所以裡面的內容是無法改變的;const p修飾的是指標,所以指標的指向是無法改變的。

就是上面的一句話,解決了全部的const的問題。

const int *p1 =&b;

去掉int,發現const修飾的是*,也就是修飾的是裡面的內容,就是說記憶體中的內容是無法改變的。

*p1 = 22;    //error

p1 = &c;    //ok

int const * p2 = &c;

去掉int,發現const修飾的是*,也就是修飾的是裡面的內容,就是說記憶體中的內容是無法改變的。

*p2 = 22;    //error

p2 = &d;    //ok

實質上,這種方式與第一種方式是完全一樣的。

int * const p3 = &d;

去掉int,發現const修飾的是p3,也就是修飾的是該指標,就是說指標的指向是無法改變的,但是指標指向的記憶體單元的內容是可以改變的。

*p3 = 22;    //ok

p3 = &e;    //error

const int * const p4 = &e;

去掉int,發現const既修飾*,又修飾的是p4,也就是修飾這個東西是死定了,就是說指標的指向是無法改變的,指標指向的記憶體單元的內容也是不可以改變的。

*p4 = 22;    //error

p4 = &a;    //error

通過上面的分析,即可解決全部關於const的問題。

最後用一個圖片進行驗證上面的結果:

測試參考原始碼:

#include <stdio.h>

int main(int argc, const char *argv[])
{
	const int a = 10;
	int b = 20;
	int c = 30;
	int d = 40;
	int e = 50;

	const int *p1 =&b;
	*p1 = 11;	//error
	p1 = &c;	//ok


	int const * p2 = &c;
	p2 = &d;	//ok
	*p2 = 11;	//error

	int * const p3 = &d;
	p4 = &e;	//error
	*p3 =11;	//ok

	const int * const p4 = &e;
	p4 = &c;	//error
	*p4 = 11;	//error

	return 0;
}