欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2013年05月15日 09:51:48   作者:  
本篇文章是對(duì)c語(yǔ)言中指針的兩處小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)存儲(chǔ)區(qū))中的;

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

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

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

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

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

相關(guān)文章

  • 紅黑樹(shù)的使用詳解

    紅黑樹(shù)的使用詳解

    本篇文章是對(duì)紅黑樹(shù)的使用詳解。需要的朋友參考下
    2013-05-05
  • C++?中IO流詳解

    C++?中IO流詳解

    這篇文章主要介紹了C++?IO流的相關(guān)知識(shí)點(diǎn),文中有詳細(xì)的代碼,希望可以幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2023-05-05
  • 數(shù)據(jù)結(jié)構(gòu) 雙機(jī)調(diào)度問(wèn)題的實(shí)例詳解

    數(shù)據(jù)結(jié)構(gòu) 雙機(jī)調(diào)度問(wèn)題的實(shí)例詳解

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu) 雙機(jī)調(diào)度問(wèn)題的實(shí)例詳解的相關(guān)資料,雙機(jī)調(diào)度問(wèn)題,又稱(chēng)獨(dú)立任務(wù)最優(yōu)調(diào)度:用兩臺(tái)處理機(jī)A和B處理n個(gè)作業(yè)的實(shí)例,需要的朋友可以參考下
    2017-08-08
  • C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用

    C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用

    strcpy和memcpy都是標(biāo)準(zhǔn)C庫(kù)函數(shù),strcpy提供了字符串的復(fù)制而memcpy提供了一般內(nèi)存的復(fù)制。下面通過(guò)本文重點(diǎn)給大家介紹C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用,非常不錯(cuò),感興趣的朋友一起看下吧
    2016-08-08
  • 詳解C語(yǔ)言中二級(jí)指針與鏈表的應(yīng)用

    詳解C語(yǔ)言中二級(jí)指針與鏈表的應(yīng)用

    對(duì)于初學(xué)者而言,有很多地方肯定是費(fèi)解的。比如函數(shù)的參數(shù)列表的多樣化,動(dòng)態(tài)分配內(nèi)存空間函數(shù)malloc等,其實(shí)這些知識(shí)和指針聯(lián)系緊密,尤其是二級(jí)指針,快跟隨小編來(lái)學(xué)習(xí)一下吧
    2022-07-07
  • C實(shí)現(xiàn)的非阻塞方式命令行端口掃描器源碼

    C實(shí)現(xiàn)的非阻塞方式命令行端口掃描器源碼

    這篇文章主要介紹了C實(shí)現(xiàn)的非阻塞方式命令行端口掃描器源碼,對(duì)于大家理解C端口掃描器有很大幫主,需要的朋友可以參考下
    2014-07-07
  • C++類(lèi)模板實(shí)戰(zhàn)之vector容器的實(shí)現(xiàn)

    C++類(lèi)模板實(shí)戰(zhàn)之vector容器的實(shí)現(xiàn)

    本文我們將做一個(gè)類(lèi)模板實(shí)戰(zhàn)-手寫(xiě)精簡(jiǎn)版vector容器。讓我們自己封裝一個(gè)數(shù)組類(lèi),可以適應(yīng)基本數(shù)據(jù)類(lèi)型和自定義數(shù)據(jù)類(lèi)型,感興趣的可以了解一下
    2022-07-07
  • 隨機(jī)加密程序的實(shí)現(xiàn)方法

    隨機(jī)加密程序的實(shí)現(xiàn)方法

    下面實(shí)例是對(duì)隨機(jī)加密程序的實(shí)現(xiàn)方法。需要的朋友參考下
    2013-05-05
  • C語(yǔ)言strlen函數(shù)全方位講解

    C語(yǔ)言strlen函數(shù)全方位講解

    在C語(yǔ)言中我們要獲取字符串的長(zhǎng)度,可以使用strlen函數(shù),strlen函數(shù)計(jì)算字符串的長(zhǎng)度時(shí),直到空結(jié)束字符,但不包括空結(jié)束字符,因?yàn)?nbsp;strlen函數(shù)時(shí)不包含最后的結(jié)束字符的,因此一般使用strlen函數(shù)計(jì)算的字符串的長(zhǎng)度會(huì)比使用sizeof計(jì)算的字符串的字節(jié)數(shù)要小
    2022-09-09
  • 創(chuàng)建二叉樹(shù) 二叉樹(shù)如何刪除節(jié)點(diǎn)操作教程

    創(chuàng)建二叉樹(shù) 二叉樹(shù)如何刪除節(jié)點(diǎn)操作教程

    本文將詳細(xì)介紹二叉樹(shù)的創(chuàng)建,節(jié)點(diǎn)刪除,節(jié)點(diǎn)增加等一系列操作方法,需要的朋友可以參考下
    2012-12-12

最新評(píng)論