const和指標的問題是筆試裡經常出現的問題。這裡綜合一下各種不同的情況。
首先是幾種const與指標組合的區分,比如:
int b = 500;const int* a = &b; [1]
int const *a = &b; [2]
int* const a = &b; [3]
const int* const a = &b; [4]
[1]和[2]其實是一樣的,都是指向int型常量的指標,而[3]是int型常量指標,兩者的區別是指向常量的指標本身可以指向別的,所指向的資料不能被修改,而常量指標本身不能被修改。[4]就不用說了,啥都甭想改。
至於例子,可以舉下面的乙個例子(以[1]為例)。這裡小小的牽扯了一點優先順序的問題。
#include那麼我們能不能突破const去修改乙個值呢?雖然這件事情本身並沒有多大意義,但是還是可以做的。我們可以用const_cast來去掉乙個const或者volatile限制。const_cast的作用主要分如下三種:using namespace std;
int main(int argc,char* argv)
轉化乙個常量指標為非常量指標至於例子轉化乙個常量引用為非常量引用
轉化乙個常量物件為非常量物件
我們舉如下乙個例子:
#include
using namespace std;
class test };
int main(int argc,char* argv)
{ test t(1);
出錯 int b=const_cast(t.a);
int& c=const_cast(t.a);
int* d=const_cast(&t.a);
b=2;
c=3;
cout《原始碼借用了乙個微軟今年的筆試題,當然原題只是想說明const的成員變數可以被:a(b)這種初始化方式初始化。這裡主要是想說const_cast有三種轉換方式,需要注意的是b其實是乙個新的變數了,而c和d仍然引用和指向了原來的那個常量。
關於const 指標
第一種const指標 const double pc 0 這種型別的定義表示pc指標指向的記憶體的內容不可通過pc來修改 const 變數的位址只能賦給const指標 const double pc 0 const double minwage 9.60 pc minwage 但是const指標也可...
指向const的指標和const指標
指向const的指標 int gorp 16 int chips 12 const int p snack gorp 其中p snack指向乙個const int。p snack 20 不被允許,p snack的值為const,禁止修改p snack指向的值,p snack chips 可以執行,p...
const指標和指向const物件的指標
1.有關const指標和指向const物件指標的一道題 首先要說明的是怎麼來判斷const指標還是指向const的指標 如果const後面跟的是型別,那麼const是用來修飾物件的,所以它是指向const物件的指標 但是如果const後面跟的是指標本身,那麼const是用來修飾指標的,所以它是con...