關於const和指標的專題

2021-06-05 14:48:40 字數 1142 閱讀 5279

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

using namespace std;

int main(int argc,char* argv) 

那麼我們能不能突破const去修改乙個值呢?雖然這件事情本身並沒有多大意義,但是還是可以做的。我們可以用const_cast來去掉乙個const或者volatile限制。const_cast的作用主要分如下三種:

轉化乙個常量指標為非常量指標

轉化乙個常量引用為非常量引用

轉化乙個常量物件為非常量物件

至於例子

我們舉如下乙個例子:

#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...