国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

分析C語言指針的兩處小tip

2020-02-24 14:33:55
字體:
供稿:網(wǎng)友

對(duì)于C語言,武林小編說過許多了,今天繼續(xù)分析C語言指針的兩處小tip,本文對(duì)C語言中指針的兩處小tip進(jìn)行了詳細(xì)的分析介紹,下面就跟隨武林技術(shù)頻道的編輯一起來看看。

1:常量指針與指針常量

常量指針與指針常量名字很接近,但是兩者區(qū)別很大。
常量指針是指指向常量的指針,例如:char const *st[4]="str";或者使用下面的方法,效果是一樣的:const char *st[4]="str"; 它聲明了一個(gè)指針變量,這個(gè)指針指向了一個(gè)常量字符串,但是由于指向的內(nèi)存空間是常量,因此該地址的內(nèi)容是不能修改的,例如:*st="no"; //這是不行的,因?yàn)閮?nèi)存空間的內(nèi)容不能修改st="ok"; //這是可以的,雖然指向的內(nèi)存內(nèi)容不能修改,但是指針的指向是可以修改的。
指針常量是指一個(gè)指向固定內(nèi)存單元的指針,其內(nèi)容可以修改,但是不能改變指向的位置,例如:char *const st[4]="str";*st="ok"; //這是可以的,因?yàn)橹赶蛭恢玫膬?nèi)容可以修改。st="no"; //這樣行不通,因?yàn)橹羔樖遣荒芨淖冎赶蛭恢茫慈绻跏蓟癁榈刂?X8000,那么它只能指向這個(gè)位置,不能改變,但是0X8000的內(nèi)容是可以改變的。

char *s = "abcde";
s[0] = '1';//此句在運(yùn)行時(shí)出錯(cuò)

如下是可以的:

char s[] = "abcde";
s[0] = '1';

  
因?yàn)椋?/strong>

字符串常量是不能改的,編譯后是放到只讀內(nèi)存(靜態(tài)存儲(chǔ)區(qū))中的;

char[]和char*在很多地方可以通用,但是有個(gè)微妙的關(guān)系,那就是頭指針相同;

因?yàn)椤巴ㄟ^指針修改字符串常量的行為”是未定義的,上次就有個(gè)人問"為什么上述代碼在TC下不報(bào)錯(cuò)而在VC6.0下報(bào)錯(cuò)"。不過,現(xiàn)在大多實(shí)現(xiàn)把常量字符串的存儲(chǔ)空間設(shè)置為read-only,所以運(yùn)行時(shí)報(bào)錯(cuò);

char *s = "abcde";相當(dāng)于const char *s = "abcde";

-------------------------------------------
按照樓上各位的說法,編譯器應(yīng)該禁止這么聲明:
char *s = "abcde";
而強(qiáng)制我們?nèi)缦侣暶鳎?br>const char *s = "abcde";
為什么編譯器沒有這么做呢?
--------------------------------------------
沒錯(cuò),的確因該像樓主說的那樣,編譯器應(yīng)該禁止這種行為,進(jìn)而幫助程序員寫出正確的程序。
但是,這是一個(gè)特殊情況,是一個(gè)特例!
為什么這么說呢?因?yàn)閏har *s = "abcde";這種模式已經(jīng)被很多人所使用(也包括樓主),它被使用的如此廣泛以至于標(biāo)準(zhǔn)給它一些寬容:允許這樣的代碼通過編譯。

-------------------------------------------- 《effective c++》91頁注釋1:
在C++ standard中,"Hello"的型別是const char[];這個(gè)型別幾乎總是被視為const char*。因此我們預(yù)期,以一個(gè)字符串子面常量(string literal,例如"hello")作為一個(gè)char*變量的初值,會(huì)違反常量性。但是此種行為在C語言中實(shí)在太過頻繁,所以C++ standard對(duì)于這樣的初始化動(dòng)作特別給與豁免。盡管如此,你還是應(yīng)該避免這么做,因?yàn)槟钱吘共槐淮蠹艺J(rèn)同。更多精彩內(nèi)容,盡在https://js.Vevb.com。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 宁晋县| 清新县| 临猗县| 靖边县| 长春市| 黄冈市| 乌拉特前旗| 临猗县| 施甸县| 湘西| 临漳县| 穆棱市| 芒康县| 灵丘县| 晴隆县| 濉溪县| 沙田区| 汽车| 南华县| 社会| 文山县| 利辛县| 随州市| 西安市| 南召县| 江都市| 秦皇岛市| 东阳市| 百色市| 迭部县| 富顺县| 昌邑市| 南岸区| 犍为县| 江华| 密云县| 龙海市| 万州区| 塔城市| 鹿泉市| 福建省|