字串常數常數字串 指針常數常數指針問題

2020-08-08 14:10:44

C/C++一大玄學 指針常數字串指針指針字串,在使用的時候總是各種問題百出,到底是什麼因素導致呢?
1:死記硬背;
2:運用場景不多;
3:不同人看法一致,說法不同,導致記憶沒有重疊。

我們來看官方的說法:

字串常數
常數字串
定義:用雙引號(「」)括起來的0個或者多個字元組成的序列;
儲存:每個字串尾自動加一個 ‘\0’ 作爲字串結束標誌;
其重點在於常數 ,常數的內容是個字串。
沒區別
指針常數和常數指針,加了指針就有區別了
指針常數:這個常數是指針型別的
也就是說,這個指針是一個常指針,指向的地址空間不能變;
但是注意:
我們不能更改p的指向,但是我們可以更改p指向空間的 內容,這就是指針常數。

    int a = 5;
	int * const p = &a;
	cout << *p << endl;
	a = 6;
	cout << *p << endl;

常數指針:
常數指針是指向常數的指針,也就是這個指針是可以修改的,但是原來指針所指向的空間是一個常數,這是不能修改的。

    int a = 5;
	int b = 6;
	int const * p = &a;
	cout << *p << endl;
	p = &b;
	cout << *p << endl;

我們還會看到一種寫法

	const char * p = "str";

這個寫法說明了指針p指向的是個常數字串,這個字串的內容不允許修改,但是指針可以更改。

   const char * p = "str";
	cout << p << endl;
	p = "asdnaj";
	cout << p << endl;

簡記:
*和 const誰在前先讀誰,
指針常數是這個指針是常數,
常數指針是這個指針指的內容是常數。