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

首頁 > 編程 > C++ > 正文

C++教程:C++指針與保護

2020-05-23 14:27:14
字體:
來源:轉載
供稿:網友
在第二節,我們說到了,如果沒有對指針進行初始化就改變它所指向的內存里的數據是非常危險的。因為不確定的指針有可能指向了一個系統需要的關鍵數據,數據一旦被更改或破壞系統就會崩潰。在我們使用電腦磁盤的時候,都知道有一種措施叫做“寫保護”。(或者稱為“只讀”,即只可以讀,不可以寫)那么,我們能否給指針加上寫保護呢?

對內存只讀的指針

為了解決指針可能誤修改或破壞內存中的數據,我們可以對內存中的數據加上寫保護。即具有這種屬性的指針只能夠讀出內存中的數據,卻不能修改內存中的數據。我們把具有這種屬性的指針稱為指向常量的指針,簡稱常量指針。

給內存中的數據加寫保護的方法是在聲明指針時,在指針類型(即各種數據類型)前加上const,表示這些數據是常量,只能讀不能寫。比如:const int *iptr;,這時候我們只能夠通過指針iptr讀出內存里的數據,但是不能對其寫入、修改。

當然,這樣的保護措施只是防止通過間接引用iptr修改內存中的數據,并不保護iptr本身和iptr所指向的變量。

指針型常量

我們說,指針同整型,字符型一樣,是一種數據類型。整型可以有整型常量和整型變量;字符型可以有字符型常量和字符型變量。那么,指針也應該有指針常量。指針常量和常量指針不同,指針常量是指正所指向的位置不能改變,即指針本身是一個常量。但是指針常量可以通過間接引用修改內存中的數據。定義指針常量的語句格式為:
    指針類型 * const 指針常量名=&變量名;

下面我們來看一段程序,實踐一下指針常量和常量指針:(程序8.4)
#include "iostream.h"
int main()
{
   int a=42;
   const int b=84;
   const int *captr=&a;//常量指針
   int * const acptr=&a;//指針常量
   int *bptr=&b;//錯誤,不能把常量的地址給指針變量
   const int *cbprt=&b;//把常量的地址給常量指針是允許的
   *captr=68;//錯誤,間接引用常量指針不可修改內存中的數據
   *acptr=68;//間接引用指針常量可以修改內存中的數據
   captr=&b;//常量指針可以指向其他變量
   acptr=&b;//錯誤,指針常量不能指向別的變量
   const int * const ccaptr=&a;//常量指針常量,既不能間接引用修改數據,也不能指向別的變量或常量
   *ccaptr=68;//錯誤,不能間接引用修改數據
   ccaptr=&b;//錯誤,不能指向別的常量或變量
   return 0;
}
以上程序存在錯誤,無法通過編譯。我們考慮到使用指針的安全性的時候,就能想到要使用以上這些保護措施保護內存中的數據。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 怀仁县| 桐梓县| 仙居县| 平谷区| 甘洛县| 开原市| 丰台区| 石屏县| 泰和县| 永顺县| 开鲁县| 叶城县| 中超| 布拖县| 枣强县| 沈阳市| 绥芬河市| 陵水| 墨玉县| 奉贤区| 乐清市| 平定县| 吐鲁番市| 灵武市| 台山市| 稷山县| 桐城市| 安塞县| 珠海市| 岐山县| 定州市| 信丰县| 焦作市| 卫辉市| 团风县| 师宗县| 大安市| 密云县| 南陵县| 沅江市| 阳曲县|