面試題 const與指標

2021-09-02 06:12:49 字數 2058 閱讀 3800

(1)const int *p; int const *p2;

#include #include #include using namespace std;

int main()

*p = 5;

報錯:error: assignment of read-only location '* p'

*p2 = 5 ;

報錯:error: assignment of read-only location '* p2'

(2)int *const p3

#include #include #include using namespace std;

int main()

int *const p3;

報錯:error:uninitialized const 'p3' 沒有對p3進行初始化。

p3 = &b;

*p3 = 8;

*p3是變數,可以更改指標p3指向的值。

(3)const int *const p3

#include #include #include using namespace std;

int main()

int *const p3;

報錯:error:uninitialized const 'p3' 沒有對p3進行初始化。

p3 = &b;

*p3 = 8;

報錯:error: assignment of read-only location '* (const int*)p' *p3是常量,不可以更改指標p3指向的值。

具體總結:

int* p = 4; //non-const pointer,non-constdata

const char* p = &p; //non-constpointer,const data;

char* const p = &p;//constpointer,non-const data;

const char* const p = &p; //constpointer,const data;

關於定義的閱讀,一直以為這段解釋很不錯了已經,即以*和const的相對位置來判斷:

const語法雖然變化多端,但並不莫測高深。如果關鍵字const出現在*左邊,表示被指物是常量;如果出現在*右邊,表示指標自身是常量;如果出現在*兩邊,表示被指物和指標兩者都是常量。

如果被指物是常量,有些程式設計師會將關鍵字const寫在型別之前,有些人會把它寫在型別之後、*之前。兩種寫法的意義相同,所以下列兩個定義相同:

const widget* w;

widget const* w;

其實很簡單,const和*的優先順序相同

且是從右相左讀的,即「右左法則」

其實const只是限定某個位址儲存的內容不可修改

比如int*p;讀作p為指標,指向int,所以p為指向int的指標

int*const p;讀作p為常量,是指標,指向int,所以p為指向int的常量指標, p不可修改

int const *p;p為指標,指向常量,為int,所以p為指向int常量的指標, *p不可修改

int ** const p; p為常量,指向指標,指標指向int,所以p為指向int型指標的常量指標,p不可修改

int const**p; p為指標,指向指標,指標指向常量int,所以p為指標,指向乙個指向int常量的指標, **p為int,不可修改

int * const *p ; p為指標,指向常量,該常量為指標,指向int,所以p為指標,指向乙個常量指標,*p為指標,不可修改

int ** const *p; p為指標,指向常量,常量為指向指標的指標,p為指標,指向常量型指標的指標,*p為指向指標的指標,不可修改

int * const **p; p為指標,指向乙個指標1,指標1指向乙個常量,常量為指向int的指標,即p為指標,指向乙個指向常量指標的指標, **p為指向乙個int的指標,不可修改

面試題 指標

一 指標 1 利用指標實現兩數交換 include using namespace std void swap1 int p,int q void swap2 int p,int q void swap3 int p,int q void swap4 int p,int q void swap5 i...

面試題 關於指標

面試題 下列c 程式會在哪一行崩潰?struct s main 分析 int p s.i時,一直到p 0 4,p 1 3的時候,p始終等於 s.i。s.p p 建立了如下的關係 s.p存了p的值,也即 s.i,s.p 1 相當於 s.i 1 即s.i的位址加1.也就是s.p.s.p 1 和s.p其實...

面試題 指標 引用

返回目錄 問題 問 引用與指標有什麼區別?答 1.引用必須初始化,指標可以不用。2.引用初始化以後就不能被改變 即只能初始化一次,始終只指向指定的物件 而指標可以改變所指向的物件。3.不存在指向空值的引用,而指標可以指向乙個空值,即空指標。4.因為引用不能指向空值,這意味著使用引用之前不需要測試其合...