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

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

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

1:常量指針與指針常量

常量指針與指針常量名字很接近,但是兩者區(qū)別很大。
常量指針是指指向常量的指針,例如:char const *st[4]="str";或者使用下面的方法,效果是一樣的:const char *st[4]="str"; 它聲明了一個指針變量,這個指針指向了一個常量字符串,但是由于指向的內(nèi)存空間是常量,因此該地址的內(nèi)容是不能修改的,例如:*st="no"; //這是不行的,因為內(nèi)存空間的內(nèi)容不能修改st="ok"; //這是可以的,雖然指向的內(nèi)存內(nèi)容不能修改,但是指針的指向是可以修改的。
指針常量是指一個指向固定內(nèi)存單元的指針,其內(nèi)容可以修改,但是不能改變指向的位置,例如:char *const st[4]="str";*st="ok"; //這是可以的,因為指向位置的內(nèi)容可以修改。st="no"; //這樣行不通,因為指針是不能改變指向位置,即如果初始化為地址0X8000,那么它只能指向這個位置,不能改變,但是0X8000的內(nèi)容是可以改變的。

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

如下是可以的:

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

  
因為:

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

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

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

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

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

-------------------------------------------- 《effective c++》91頁注釋1:
在C++ standard中,"Hello"的型別是const char[];這個型別幾乎總是被視為const char*。因此我們預(yù)期,以一個字符串子面常量(string literal,例如"hello")作為一個char*變量的初值,會違反常量性。但是此種行為在C語言中實在太過頻繁,所以C++ standard對于這樣的初始化動作特別給與豁免。盡管如此,你還是應(yīng)該避免這么做,因為那畢竟不被大家認(rèn)同。

相關(guān)文章

  • 紅黑樹的使用詳解

    紅黑樹的使用詳解

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

    C++?中IO流詳解

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

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

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu) 雙機(jī)調(diào)度問題的實例詳解的相關(guān)資料,雙機(jī)調(diào)度問題,又稱獨立任務(wù)最優(yōu)調(diào)度:用兩臺處理機(jī)A和B處理n個作業(yè)的實例,需要的朋友可以參考下
    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庫函數(shù),strcpy提供了字符串的復(fù)制而memcpy提供了一般內(nèi)存的復(fù)制。下面通過本文重點給大家介紹C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用,非常不錯,感興趣的朋友一起看下吧
    2016-08-08
  • 詳解C語言中二級指針與鏈表的應(yīng)用

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

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

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

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

    C++類模板實戰(zhàn)之vector容器的實現(xiàn)

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

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

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

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

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

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

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

最新評論