亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

詳解C語言中的常量指針和指針常量

2020-01-26 14:59:22
字體:
來源:轉載
供稿:網友

概述
對于新手來說,指針在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;   } 


在上面的例子中:

  •     我們定義了兩個變量var1和var2
  •     聲明一個常量指針ptr,并讓其指向var1
  •     然后,我們讓ptr指向var2
  •     最后,我們試圖打印這個指針指向的內容


簡而言之,我們定義了一個常量指針,并且試圖修改常量指針指向的地址

現在,讓我們來編譯這個程序:

2015810100515550.png (601×68)

所以,一旦常量指針指向了某一地址,我們不能更改常量指針的地址(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;   } 


在上面代碼里:

  •     我們定義了一個變量var1,并將其賦值為0
  •     我們定義了一個指針常量并讓它指向變量var1
  •     我們試圖修改指針常量指向的值
  •     打印指針常量指向的值


然后我們編譯上面的程序:

2015810100548211.png (600×65)

我們可以看到*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;   } 


在上面代碼中:

  •     我們聲明了兩個變量var1和var2
  •     我們聲明了一個指向常量的常量指針ptr,并讓ptr指向變量var1
  •     我們試圖修改指針的地址和指針指向的內容


當我們編譯這段代碼的時候:

2015810100607335.png (598×80)

而C/C++中常把指針和常量混合起來使用,其最大的用途就是作為函數的形式參數,保證實參在被調函數中的不可改變的特性,那到底常量指針和指針常量有什么區別呢?

總結
好了,現在來總結一下 常量指針 和 指針常量 的區別

首先一定要明白哪種定義方式是常量指針,哪種是指針常量,這里可以記住三句話加深記憶:

* (指針)和 const(常量) 誰在前先讀誰 ;*象征著地址,const象征著內容;誰在前面誰就不允許改變。

好吧,讓我們來看這個例子:

int a =3; int b = 1; int c = 2; int const *p1 = &b;//const 在前,定義為常量指針 int *const p2 = &c;//*在前,定義為指針常量  



常量指針p1:指向的地址可以變,但內容不可以重新賦值,內容的改變只能通過修改地址指向后變換。  

  •     p1 = &a是正確的,但 *p1 = a是錯誤的。
  • 指針常量p2:指向的地址不可以重新賦值,但內容可以改變,必須初始化,地址跟隨一生。
  •     p2= &a是錯誤的,而*p2 = a 是正確的。
  • 對于常量指針p1,我們可以改變它指向的地址,但不能改變指向的內容,如果改變了,就會出錯,下面是18行代碼取消注釋后編譯器提示的錯誤:

下面是在Vim編輯器中的調試結果

2015810101820212.png (818×482)

上述代碼在注釋 18行 和 24行 代碼后才能正確輸出,下圖是正確結果

2015810101842963.png (405×162)

輸出結果可以看出,對于常量指針p1,改變其地址指向,內容也隨著地址的改變而變化了。

而對于指針常量p2,初始化后地址就固定了,內容可以隨時重新賦值。

對于常量指針p1,我們可以改變它指向的地址,但不能改變指向的內容,如果改變了,就會出錯,下面是18行代碼取消注釋后編譯器提示的錯誤:

2015810101902257.png (595×20)

輸出結果可以看出,對于常量指針p1,改變其地址指向,內容也隨著地址的改變而變化了。

而對于指針常量p2,初始化后地址就固定了,內容可以隨時重新賦值。

對于常量指針p1,我們可以改變它指向的地址,但不能改變指向的內容,如果改變了,就會出錯,下面是18行代碼取消注釋后編譯器提示的錯誤:

2015810101922076.png (583×21)
經過上面的介紹,我想大家應該知道常量指針和指針常量的區別了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
zzijzzij亚洲日本成熟少妇| 日韩女优人人人人射在线视频| 亚洲女人天堂视频| 国产99久久精品一区二区| 在线播放精品一区二区三区| 国产美女精彩久久| 亚洲精品中文字| 日韩精品免费在线视频观看| 91国自产精品中文字幕亚洲| 色偷偷噜噜噜亚洲男人| 国精产品一区一区三区有限在线| 中文字幕亚洲天堂| 午夜剧场成人观在线视频免费观看| 精品国产欧美成人夜夜嗨| 亚洲另类欧美自拍| 国产日韩欧美在线| 精品欧美激情精品一区| 亚洲伊人第一页| 久热在线中文字幕色999舞| 7777免费精品视频| 日韩美女视频在线观看| 亚洲国产精品美女| 亚洲天堂日韩电影| 日韩hd视频在线观看| 色综合视频一区中文字幕| 欧美激情一级精品国产| 欧美重口另类videos人妖| 亚洲第一精品福利| 最新日韩中文字幕| 欧美一级淫片aaaaaaa视频| 97**国产露脸精品国产| 日韩电影免费观看中文字幕| 久久久久久有精品国产| 久久国产精品免费视频| 亚洲男人的天堂在线| 日韩成人在线免费观看| 在线视频国产日韩| 久久成人在线视频| 国产一区二区香蕉| 亚洲字幕一区二区| 日韩成人在线播放| 欧美在线观看一区二区三区| 亚洲女人天堂av| 亚洲欧美成人在线| 欧美另类xxx| 中文字幕久久亚洲| 中文字幕日韩精品在线| 美女性感视频久久久| 成人激情视频小说免费下载| 亚洲自拍偷拍在线| 3344国产精品免费看| 欧美日韩亚洲精品内裤| 日韩av一区二区在线| 91国内精品久久| 亚洲天堂一区二区三区| 亚洲免费电影在线观看| 亚洲高清色综合| 欧美黑人xxxx| 亚洲一二三在线| 欧美成人精品xxx| 91综合免费在线| 久久综合伊人77777蜜臀| 久久久www成人免费精品张筱雨| 亚洲国产中文字幕在线观看| 91在线免费看网站| 久久影视免费观看| 成人免费视频a| 国产精品久久中文| 欧美午夜精品在线| 久久久久久久久久久久久久久久久久av| 97av在线视频免费播放| 精品久久在线播放| 91中文在线观看| 久久久久久久色| 成人黄色大片在线免费观看| 97婷婷大伊香蕉精品视频| 92福利视频午夜1000合集在线观看| 国产精品入口夜色视频大尺度| 日本精品一区二区三区在线| 国产视频精品xxxx| 性夜试看影院91社区| 日韩极品精品视频免费观看| 成人在线视频网站| 欧美最猛性xxxxx免费| 91九色国产社区在线观看| 岛国av在线不卡| 91久久久久久久一区二区| 国产精品69久久| 国产精品免费网站| 国产精品啪视频| 美日韩精品免费视频| 日本一区二区三区在线播放| 欧美电影在线播放| 久久精品国产亚洲精品2020| 亚洲欧美资源在线| 久久人人爽人人爽人人片亚洲| 亚洲欧美日韩一区在线| 久久久亚洲精品视频| 午夜精品在线视频| 91精品视频免费| 91免费的视频在线播放| 久久国产精品网站| 91精品国产自产91精品| 国产精品女人久久久久久| 影音先锋欧美精品| 97精品一区二区视频在线观看| 国产精品h片在线播放| 久久精品国产电影| 91精品久久久久久久久| 日韩欧美精品在线观看| 国产美女久久久| 神马国产精品影院av| 欧美最猛性xxxxx(亚洲精品)| 一本色道久久88综合日韩精品| 日韩人体视频一二区| 91超碰caoporn97人人| 日韩美女在线观看一区| 亚洲深夜福利视频| 最近2019中文字幕大全第二页| 日韩欧中文字幕| 精品一区二区电影| 久久久av亚洲男天堂| 法国裸体一区二区| 日产精品久久久一区二区福利| 精品久久久国产精品999| 亚洲欧美日韩国产精品| 久久好看免费视频| 欧美在线一区二区三区四| 夜夜嗨av一区二区三区四区| 永久555www成人免费| 欧美成人四级hd版| 国产精品久久婷婷六月丁香| 激情亚洲一区二区三区四区| 亚洲自拍高清视频网站| 欧美成人第一页| 国产精品入口免费视频一| 日本精品视频在线观看| 国产福利精品av综合导导航| 亚洲日本中文字幕| 国产美女主播一区| 国产精品露脸自拍| 欧美精品一区在线播放| 国产精品福利在线观看网址| 成人免费在线网址| 青青久久av北条麻妃海外网| 亚洲最新av在线| 日本精品视频在线观看| 色先锋资源久久综合5566| 55夜色66夜色国产精品视频| xvideos亚洲| 日日狠狠久久偷偷四色综合免费| 91在线视频免费| 亚洲精选在线观看| 久久国产色av| 伊人久久五月天| 久久久久久久久久久久av| 国产噜噜噜噜噜久久久久久久久| 亚洲国产三级网| 日韩av最新在线| 日韩亚洲在线观看| 国产精品久久色| 亚洲欧美日韩一区二区在线| 中国人与牲禽动交精品| 精品国内亚洲在观看18黄|