cconst和指標問題,C 指標與const問題

時間 2022-03-31 11:30:02

1樓:

這麼說:

一、指標常量(比如int *const p)指標本身是常量,一旦初始化不能更改。

int a=100,b=200;

int *const pa=&a; //定義指標常量時初始化

錯誤,不能修改指標常量

*pa=b; //可以修改指標常量所指物件的值

二、指向常量的指標(比如const int * p)指標沒有什麼特別的,只是指向的物件初始化後就不能更改。

int a=100;

const int *pa;

pa=&a;

*pa=200; //錯誤,不能修改指向常量指標所指的物件

int b=*pa+100; //正確,可以讀指向常量指標的物件

三、指向常量的指標常量(比如 const int * const p)顯而易見,就是前兩者的合體。指標不能動,所指的物件也不能動。

int a=100,b=200;

const int * const pa=&a;

錯誤,不能更改指標常量

*pa=500; //錯誤,不能更改指向指標常量的指標常量

b=a; //正確,一切不影響變數的讀寫

純屬個人經驗,僅供參考。lz不懂再問~

2樓:匿名使用者

這個問題請站在編譯器的角度去理解。

編譯器的一項任務就是"語法分析」, 而語法規定【const 變數是不許可被修改的】,編譯器一直貫徹這一點。

const t a = 123; // 你宣告一個t型別的const變數

編譯器:嗯嗯, 名字合法, 型別合法, 初始化合法, 給你通過!

a = 234; // 你想給a賦值。

編譯器:賦值? 想得美! const 變數不讓賦值!

int *p = &a; // 你改了下, 用一個指標指向a

編譯器: 哼。 你想偷偷的用指標去改a的值, 對不對!對不對!不行不行!!

const int* cp = &a; // 好吧, 那麼我改成const int* 總行了吧.

編譯器:const 指標就勉強算你過了。【const * 無權修改其指向的變數】

int** pp = &cp; // 你要曲線救國。

編譯器:雕蟲小技!我已經看穿了。 不行!

const int** cpp = &cp;

編譯器:安全!

因為解引用非const指標可以修改目標值, 而const指標無權修改。

所以對於const變數來說, 為了貫徹其"不變「的原則, 其地址是無法被非const指標接收的。 只有const指標例外。

ps. 以上const指標是指 」指向const物件的指標" 的縮寫。

3樓:極天異雲

你看到這個書本很垃圾,如果你貼出來的都是原文,那麼這寫得非常晦澀難懂像一個糟糕透頂的繞口令。我嘗試理解一下。

1.可以理解為const指標定義時必須被初始化指向一個具體的變數,這個變數可以是非const的變數或者指標,因為const指標定義之後不能修改。

2.意思是如果要指向的變數直接賦值給const指標,如果這個變數自身不是指標,這個變數可以是常量(本身就是地址)也可以是變數地址(&); 第二部分和變數地址的意思一樣。

3.說的和2的意思一樣,只不過不包含了常量。

總而言之一句話,就是const指標不能指向非const指標指向的東西(這純粹就是一句沒用的廢話,因為c++是沒有這個規則的,如果有錯誤編譯器會幫你檢查出來定義的不妥)。

不知道你看的是什麼狗屁教材,有多遠就扔多遠,這本書看完了,在它的誘導下,你的c++必定完蛋。

c++指標與const問題

4樓:

const int ic;錯——const變數必須初始化,如const int ic=3;才正確。

int *const cpi=⁣錯——指向int型目標的常指標不得用const變數的地址初始化。

cpi=pic;錯——指向常指標cpi不得重新賦值。

cpic=⁣錯——同3.。

ic=*cpic;錯——const變數不得重新賦值。

c++初學者的問題:this指標和const常量的問題

5樓:匿名使用者

c++中const 引用的是物件時只能訪問該物件的const 函式,因為其他函式有可能會修改該物件的成員,編譯器為了避免該類事情發生,會認為呼叫非const函式是錯誤的。

函式末尾加const,表示不會修改該物件的成員。

c++ this指標的問題 5

6樓:千鋒教育

如果你想在類成員函式中顯示呼叫類成員變數採用「this.成員變數」這種形式就行了,返回this指標:return this;

如:classa setvalue(int a) {this.a = a;

return this;

c++關於 引數裡面用const和&的問題。

7樓:97樂於助人

返回const,則呼叫時也必須宣告為const,防止返回的指標內容被修改。

8樓:旅春冬

這個常引用的作用是不能改變x,不是不能改變引用指向。

9樓:我已經匿名了

引用變數只能初始化一次,即繫結被引用的物件(變數);而const是常量限制,是指不允許修改變數的值,兩碼事。

本例中,&使得x作為實參的引用變數(不會進行拷貝初始化,從而省時省記憶體);const限制x的值不能在本函式中被修改。在函式體內任何企圖修改x值的行為都會被編譯器檢查到並報錯。你去掉const,就可在函式體內可以修改x的值(比如 x=x+ "hello";)。

c語言問題,陣列與指標,C語言陣列和指標的問題

char a computer a指向一個常量字串,常量字串是不能修改的,而你的for迴圈內要修改a指向的這個常量字串,自然要出錯 char a computer 這個a就是個普通陣列了,它的內容是可以改動的,就不會出錯了 因為 a是個指標啊 所以應該賦值賦地址!所以 應該 char a compu...

C語言指標問題,行指標的賦值與取值

1.p a 1可以。表示p指向陣列a的第1行。2.p a表示p指向陣列a的第0行。3.p a.則 p是陣列a的首地址,這個地址型別是int 4.可以定義成 p 4 但不能p a。因為它們型別不一致。5 p的值與型別與a 0 相等。 菜刀剁菜鳥 1.正確 2.p a是表示p指向陣列a的第0行 p指a ...

關於C 指標小問題,關於C 指標小問題

這些你可以分步檢視輸出,不要老是問別人,替你修改一會 include using namespace std void main int m 1,n 2 int p1 m,p2 n 先讓p1指向m,p2指向n p1 3 因為p1指向m所以此句等於m 3 也等於m m 3 執行後m 4 p2 p1 讓...