詳解C說話中的常量指針和指針常量。本站提示廣大學習愛好者:(詳解C說話中的常量指針和指針常量)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C說話中的常量指針和指針常量正文
概述
關於老手來講,指針在c說話裡老是一個異常難以懂得的概念。在這篇文章中,我們將說明常量指針,指針常量,const pointer to const(ps:樓主認為這可以翻譯成指向常量的常量指針)的差別
常量指針
讓我們先來懂得甚麼是常量指針。常量指針是指指針指向的地址是常量。換句話說,一旦常量指針指向了一個變量,你不克不及讓該常量指針指向其他變量了
常量指針的聲明辦法以下:
<type of pointer> * const <name of pointer>
常量指針聲昭示例:
int * const ptr;
讓我們用一小段代碼來講明常量指針:
#include <stdio.h> int main(void) { int var1 = 0, var2 = 0; int * const ptr = &var1; ptr = &var2; printf("%d\n", *ptr); return 0; }
在下面的例子中:
簡而言之,我們界說了一個常量指針,而且試圖修正常量指針指向的地址
如今,讓我們來編譯這個法式:
所以,一旦常量指針指向了某一地址,我們不克不及更改常量指針的地址(ps:然則可以修正常量指針指向的內容)
指針常量
從名字中便可以顯著得出,一個指針,我們沒法修正指針指向的內容,這類指針就叫做指針常量。關於這類指針,你可以修正指針指向的地址,然則不克不及修正指針指向的內容
指針常量的界說以下:
const <type of pointer> * <name of pointer>
或許
<type of pointer> const * <name of pointer>
指針常量示例以下:
const int *ptr; int const *ptr;
讓我們用一小段代碼來說明指針常量:
#include <stdio.h> int main(void) { int var1 = 0; const int *ptr = &var1; *ptr = 2; printf("%d\n", *ptr); return 0; }
在下面代碼裡:
然後我們編譯下面的法式:
我們可以看到*ptr是只讀屬性。這意味著,假如指針常量指向了一個變量,我們不克不及修正該指針常量指向的值
指向常量的常量指針
假如你懂得了下面兩種指針類型,那作為上述兩種指針的混雜形狀,你也應當異常好懂得。指向常量的常量指針,你既不克不及修正指針的地址,也不克不及修正指針指向的內容
指向常量的常量指針界說以下:
const <type of pointer> * const <name of pointer>
示例:
const int * const ptr;
讓我們寫一小段代碼來懂得指向常量的常量指針:
#include <stdio.h> int main(void) { int var1 = 0, var2 = 0; const int * const ptr = &var1; *ptr = 1; ptr = &var2; printf("%d\n", *ptr); return 0; }
在下面代碼中:
當我們編譯這段代碼的時刻:
而C/C++中常把指針和常量混雜起來應用,其最年夜的用處就是作為函數的情勢參數,包管實參在被調函數中的弗成轉變的特征,那究竟常量指針和指針常量有甚麼差別呢?
總結
好了,如今來總結一下 常量指針 和 指針常量 的差別
起首必定要明確哪一種界說方法是常量指針,哪一種是指針常量,這裡可以記住三句話加深記憶:
* (指針)和 const(常量) 誰在前先讀誰 ;*意味著地址,const意味著內容;誰在後面誰就不許可轉變。
好吧,讓我們來看這個例子:
int a =3; int b = 1; int c = 2; int const *p1 = &b;//const 在前,界說為常量指針 int *const p2 = &c;//*在前,界說為指針常量
常量指針p1:指向的地址可以變,但內容弗成以從新賦值,內容的轉變只能經由過程修正地址指向後變換。
上面是在Vim編纂器中的調試成果
上述代碼在正文 18行 和 24行 代碼後能力准確輸入,下圖是准確成果
輸入成果可以看出,關於常量指針p1,轉變其地址指向,內容也跟著地址的轉變而變更了。
而關於指針常量p2,初始化後地址就固定了,內容可以隨時從新賦值。
關於常量指針p1,我們可以轉變它指向的地址,但不克不及轉變指向的內容,假如轉變了,就會失足,上面是18行代碼撤消正文後編譯器提醒的毛病:
輸入成果可以看出,關於常量指針p1,轉變其地址指向,內容也跟著地址的轉變而變更了。
而關於指針常量p2,初始化後地址就固定了,內容可以隨時從新賦值。
關於常量指針p1,我們可以轉變它指向的地址,但不克不及轉變指向的內容,假如轉變了,就會失足,上面是18行代碼撤消正文後編譯器提醒的毛病:
經由下面的引見,我想年夜家應當曉得常量指針和指針常量的差別了。