麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

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

2020-02-24 14:33:55
字體:
來源:轉載
供稿:網友

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

1:常量指針與指針常量

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

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

如下是可以的:

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

  
因為:

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

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

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

char *s = "abcde";相當于const char *s = "abcde";

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 日本精品中文字幕 | 欧美毛片在线观看 | 久草在线观看福利 | 九九热精品免费视频 | 精品成人在线 | 日韩在线激情 | 狠狠干视频网站 | 亚洲精品久久久久久久久久久 | 国产在线欧美日韩 | 最新中文字幕免费视频 | 超级av在线| 国产毛毛片一区二区三区四区 | 九九热视频免费观看 | 成人国产精品齐天大性 | 自拍亚洲伦理 | 凹凸成人精品亚洲精品密奴 | 成人偷拍片视频在线观看 | 激情影院在线观看 | 91av日韩 | 国产成人精品网站 | 少妇一级淫片免费放4p | 色淫视频| 欧美aⅴ视频 | 成人免费网站在线观看 | 久久久www成人免费毛片 | 一级免费观看 | 欧美成人午夜 | 一级做人爱c黑人影片 | 在线视频观看一区二区 | 人成免费a级毛片 | 草草久 | 国产人成免费爽爽爽视频 | 成人在线精品视频 | 免费中文视频 | 日本aaaa片毛片免费观蜜桃 | 九九热久久免费视频 | 久久亚洲成人 | 91九色视频在线播放 | 91精品国产91| 久久久久久久亚洲精品 | 日韩视频一区二区在线观看 |