日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

常量指针与指针常量的区别(转帖)

發布時間:2023/11/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常量指针与指针常量的区别(转帖) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載:http://www.cnblogs.com/witty/archive/2012/04/06/2435311.html

三個名詞雖然非常繞嘴,不過說的非常準確。用中國話的語義分析就可以很方便地把三個概念區分開。

一) 常量指針。

常量是形容詞,指針是名詞,以指針為中心的一個偏正結構短語。這樣看,常量指針本質是指針,常量修飾它,表示這個指針乃是一個指向常量的指針(變量)。

指針指向的對象是常量,那么這個對象不能被更改。

在C/C++中,常量指針是這樣聲明的:

1)const int *p;

2)int const *p;

常量指針的使用要注意,指針指向的對象不能通過這個指針來修改,可是仍然可以通過原來的聲明修改,也就是說常量指針可以被賦值為變量的地址,之所以叫做常量指針,是限制了通過這個指針修改變量的值。例如:

int a = 5;

const int b = 8;

? const int *c = &a; // 這是合法的,非法的是對c的使用

*c = 6; // 非法,但可以這樣修改c指向的對象的值:a = 6;

const int *d = &b; // b是常量,d可以指向b,d被賦值為b的地址是合法的

? 細心的朋友在使用字符串處理函數的時候,應該會注意到這些函數的聲明。它們的參數一般聲明為常量指針。例如,字符串比較函數的聲明是這樣的:

int strcmp(const char *str1, const char *str2);

可是這個函數卻可以接收非常量字符串。例如這段程序:

char *str1, *str2;

str1 = "abcde1234";

str2 = "bcde";

if(strcmp(str1, str2) == 0)

{

printf("str1 equals str2.");

}

str1和str2的內容顯然是可以更改的,例如可以使用“str1[0] = x;”這樣的語句把str1的內容由“abcde1234”變為“xbcde1234”。因為函數的參數聲明用了常量指針的形式,就保證了在函數內部,那 個常量不被更改。也就是說,對str1和str2的內容更改的操作在函數內部是不被允許的。(就目前的應用來看,我覺得設置常量指針就是為函數參數聲明準 備的,不然還真不知道用在什么地方呢,呵呵!)

雖然常量指針指向的對象不能變化,可是因為常量指針是一個變量,因此,常量指針可以不被賦初始值,且可以被重新賦值。例如:

const int a = 12;

const int b = 15;

const int *c = &a; // 為了簡化代碼,很多人習慣賦初始值

const int *d;

d = &a; // 這樣當然是可以的

c = &b; // 雖然c已經被賦予初始值,可是仍然可以指向另一個變量

特點是,const的位置在指針聲明運算符*的左側。只要const位于*的左側,無論它在類型名的左邊或右邊,都聲明了一個指向常量的指針,叫做常量指針。

可以這么想,*左側是常量,指針指向的對象是常量。

二) 指針常量

指針是形容詞,常量是名詞。這回是以常量為中心的一個偏正結構短語。那么,指針常量的本質是一個常量,而用指針修飾它,那么說明這個常量的值應該是一個指針。

指針常量的值是指針,這個值因為是常量,所以不能被賦值。

在C/C++中,指針常量這樣聲明:

int a;

int *const b = &a; //const放在指針聲明操作符的右側

只要const位于指針聲明操作符右側,就表明聲明的對象是一個常量,且它的內容是一個指針,也就是一個地址。上面的聲明可以這么讀,聲明了一個常量b,它的值是變量a的地址(變量a的地址,不就是指向變量a的指針嗎)。

因為指針常量是一個常量,在聲明的時候一定要給它賦初始值。一旦賦值,以后這個常量再也不能指向別的地址。

雖然指針常量的值不能變,可是它指向的對象是可變的,因為我們并沒有限制它指向的對象是常量。

因此,有這么段程序:

char *a = "abcde1234";

char *b = "bcde";

char *const c = &a;

? 下面的操作是可以的。

? a[0] = 'x'; // 我們并沒有限制a為常量指針(指向常量的指針)

或者

*c[0] = 'x' // 與上面的操作一致

三)指向常量的指針常量

顧名思議,指向常量的指針常量就是一個常量,且它指向的對象也是一個常量。

因為是一個指針常量,那么它指向的對象當然是一個指針對象,而它又指向常量,說明它指向的對象不能變化。

在C/C++中,這么聲明:

? const int a = 25;

const int * const b = &a;

看,指針聲明操作符左邊有一個const,說明聲明的是一個指向常量的指針。再看,指針聲明操作符右邊有一個const,說明聲明的是一個指針常量。前后都鎖死了,那么指向的對象不能變,指針常量本身也不能變。細細體味,相信能得其道,下面就不贅述了。

用一個例子作為總結。雖然字符指針與其它指針的本質是一樣的,可是因為字符指針常用來表示字符串,常不好理解。下面就用字符指針來舉例。

char *a = "abcde1234";

const char *b = "bcde"; // b是指向常量字符串的指針變量

char *const c = &a;? // c是指向字符指針變量的常量

const char *const d = &b; // d是指向字符常量的指針常量

問題來了。

1)問:因為a是變量,a可以賦值為其它值,如"12345abc"。那么c指向a,當a變化了,c指向什么呢?

答:仍然指向"abcde1234"。雖然a可以指向別的字符串,可是c仍然指向"abcde1234",也就是a開始指向的對象。

2)問:a是變量,可以改變a的內容。那么當執行了“a[0] = 'x';”后,c會怎樣呢?

答:c當然還指向a初始指向的字符。不過,這個字符已經變成了'x'。

3)問:b是指向常量的指針變量,當b指向別的字符串,d怎么樣?

答:d仍然指向b初始的字符串。

4)問:b可以變化,b指向的字符不能變化,也就是說b[0]不能被重新賦值,可是b[1]可以被重新賦值嗎?

答:原則上b指向的字符是常量,并沒有限制下一個字符,應該可以被賦值。可是因為你使用字符串進行了初始賦值,而且編譯器是靜態編譯的,C/C++程序就把b當作字符串指針來處理了,因此,當對下一個字符進行賦值時,編譯不能通過。

其他問題,歡迎補充。

我編了這樣的口訣,記住,應該不難:

const(*號)左邊放,我是指針變量指向常量;

const(*號)右邊放,我是指針常量指向變量;

const(*號)兩邊放,我是指針常量指向常量;

指針變量能改指向,指針常量不能轉向!

要是全都變成常量,鎖死了,我不能轉向,你也甭想變樣!


創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的常量指针与指针常量的区别(转帖)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜老司机福利 | 伊人艹| 一区二区欧美精品 | 亚洲色成人一区二区三区小说 | 精品无码一区二区三区的天堂 | 亚洲精品一区二区三区精华液 | 久久久999精品 | 国产精品jizz在线观看美国 | 自拍偷拍99 | 日日爽视频 | 7色av | 超碰免费公开在线 | 在线观看免费国产 | 91精品视频观看 | 黄色大全免费观看 | 一区二区日韩av | 加勒比一区二区三区 | 国产一区欧美日韩 | 99re在线| 欧美一区二区三区四区五区 | 久久精品国产大片免费观看 | 在线欧美激情 | 两个小y头稚嫩紧窄h文 | 99视频免费在线观看 | 美女网站免费观看 | 亚洲精品视频在线观看免费视频 | 999精品在线 | 福利视频一区 | 黄色调教视频 | 99在线精品视频免费观看20 | 亚洲免费观看高清在线观看 | 国产一区二区网 | 波多野结衣欲乱上班族 | 毛片在哪看 | 神马午夜一区 | 91国产视频在线播放 | 欧美在线网站 | 国产精品美女毛片真酒店 | 欧美午夜精品久久久久久孕妇 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 尤物网站在线 | 日日麻批免费视频播放 | 怡红院久久 | 黄色三级三级三级 | 波多野结衣黄色 | 4438成人网| 天天干视频在线 | 人妻在线一区 | eeuss鲁片一区二区三区在线观看 | 最新黄色av网址 | 综合激情久久 | 亚洲精品天堂在线观看 | 一区二区三区视频在线播放 | 久久一卡二卡 | 午夜一区二区三区在线观看 | 午夜精品久久久久久久久久久 | 久久久久无码国产精品不卡 | 日韩一级| 91精品国产乱码久久 | 成人免费毛片足控 | 亚洲精品系列 | 国产视频精品在线 | 欧美另类专区 | 欧美抠逼视频 | 免费一级特黄特色毛片久久看 | 成人毛片基地 | 精品丰满人妻无套内射 | 中文文字幕一区二区三三 | 影音先锋中文字幕在线播放 | 成人网色 | 色人综合| 美国少妇在线观看免费 | 在线看片福利 | 97超碰人人澡 | 亚洲三级视频 | 青草精品| 性做久久 | 国内av| 亚洲av永久无码精品一区二区国产 | 国产91熟女高潮一区二区 | 亚洲女人18毛片水真多 | 黄网站免费在线观看 | 男人猛进女人爽的大叫 | 老色鬼网站 | 羞羞答答av | 一区二区三区天堂 | 一本色道久久综合亚洲精品酒店 | 黄色激情四射 | 日韩黄色片免费看 | 久久久久噜噜噜亚洲熟女综合 | 国产日韩欧美精品在线 | www.操| 成人精品动漫 | 精品成在人线av无码免费看 | 亚洲理论中文字幕 | 中文字幕亚洲成人 | av第一福利大全导航 | 天天摸天天干天天操 | 日本国产精品一区 |