最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于c語言指針的兩處小tip分享

 更新時(shí)間:2013年05月15日 09:51:48   作者:  
本篇文章是對c語言中指針的兩處小tip進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

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)存儲區(qū))中的;

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

因?yàn)椤巴ㄟ^指針修改字符串常量的行為”是未定義的,上次就有個(gè)人問"為什么上述代碼在TC下不報(bào)錯(cuò)而在VC6.0下報(bào)錯(cuò)"。不過,現(xiàn)在大多實(shí)現(xiàn)把常量字符串的存儲空間設(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*變量的初值,會違反常量性。但是此種行為在C語言中實(shí)在太過頻繁,所以C++ standard對于這樣的初始化動作特別給與豁免。盡管如此,你還是應(yīng)該避免這么做,因?yàn)槟钱吘共槐淮蠹艺J(rèn)同。

相關(guān)文章

  • C++非遞歸建立二叉樹實(shí)例

    C++非遞歸建立二叉樹實(shí)例

    這篇文章主要介紹了C++非遞歸建立二叉樹的方法,實(shí)例分析了二叉樹的原理與C++實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C語言中.與->的區(qū)別詳細(xì)解析

    C語言中.與->的區(qū)別詳細(xì)解析

    這篇文章主要給大家介紹了關(guān)于C語言中.與->區(qū)別的相關(guān)資料,這雖然是個(gè)小問題,但有時(shí)候很容易讓人迷惑,因?yàn)橛械臅r(shí)候用混淆了,程序編譯不通過,需要的朋友可以參考下
    2023-06-06
  • C++實(shí)現(xiàn)LeetCode(122.買股票的最佳時(shí)間之二)

    C++實(shí)現(xiàn)LeetCode(122.買股票的最佳時(shí)間之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(122.買股票的最佳時(shí)間之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 基于MFC實(shí)現(xiàn)類的序列化詳解

    基于MFC實(shí)現(xiàn)類的序列化詳解

    序列化是將程序中的對象以一種二進(jìn)制格式存儲到存儲設(shè)備中(例如文本/數(shù)據(jù)庫等),以實(shí)現(xiàn)“永生”或隨意“流動”。本文將為大家詳細(xì)講講如何基于MFC實(shí)現(xiàn)類的序列化,需要的可以參考一下
    2022-07-07
  • C語言實(shí)現(xiàn)餐飲結(jié)賬管理系統(tǒng)

    C語言實(shí)現(xiàn)餐飲結(jié)賬管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)餐飲結(jié)賬管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C++類結(jié)構(gòu)體與json相互轉(zhuǎn)換

    C++類結(jié)構(gòu)體與json相互轉(zhuǎn)換

    這篇文章主要介紹的是C++類結(jié)構(gòu)體與json相互轉(zhuǎn)換,json字符串一般使用的是開源的類庫Newtonsoft.Json,方法十分簡潔,下面就隨小編一起看下面文章內(nèi)容吧
    2021-09-09
  • QT Creator+OpenCV實(shí)現(xiàn)圖像灰度化的示例代碼

    QT Creator+OpenCV實(shí)現(xiàn)圖像灰度化的示例代碼

    這篇文章主要為大家詳細(xì)介紹了QT如何利用Creator和OpenCV實(shí)現(xiàn)圖像灰度化效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下
    2022-12-12
  • C++入門淺談之類和對象

    C++入門淺談之類和對象

    C++ 是一門面向?qū)ο蟮木幊陶Z言,理解 C++,首先要理解類(Class)和對象(Object)這兩個(gè)概念。下面和小編一起來學(xué)習(xí)吧
    2021-10-10
  • C++中typedef 及其與struct的結(jié)合使用

    C++中typedef 及其與struct的結(jié)合使用

    這篇文章主要介紹了C++中typedef 及其與struct的結(jié)合使用,需要的朋友可以參考下
    2014-02-02
  • C語言malloc與calloc區(qū)別詳解

    C語言malloc與calloc區(qū)別詳解

    本文主要介紹了C語言malloc與calloc區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評論

星子县| 贡山| 合作市| 乌兰察布市| 皮山县| 鲁甸县| 惠州市| 梁平县| 泰来县| 金川县| 环江| 扎鲁特旗| 凤庆县| 和平区| 富裕县| 安福县| 福贡县| 虎林市| 宁化县| 读书| 东乡族自治县| 河北区| 山阳县| 台东市| 馆陶县| 长宁区| 灵寿县| 芮城县| 霍城县| 蒙山县| 南充市| 明水县| 巴林左旗| 罗江县| 乐清市| 大安市| 托里县| 进贤县| 屏东县| 克东县| 全州县|