cconst問題,C 中的const的用法

時間 2022-05-17 20:20:08

1樓:

這樣解釋一下

int cc=5;

int* dd=&cc;

int* ee=&cc;

int * const &aa=dd;

aa 是 常指標,不允許 再指向別處,定義時初始化為 dd 的引用因為aa是常指標

所以 aa = ee;//會報錯

*aa = 1;//允許

int cc=5;

int* dd=&cc;

int* ee=&cc;

const int * &aa=dd;

aa 是 指向常量的指標,不允許通過aa修改aa所指變數的值,定義時初始化為 dd 的引用

aa = ee;//允許

*aa = 1;//會報錯

定義指標時

* 在左邊 const 在右邊,指標本身是常,const 在左邊 * 在右邊,指標所指變數是常

2樓:匿名使用者

int cc = 5;

int const i = 20;

int change = 10;

int * const aa = &cc;// aa的值不能修改,即它永遠指向 cc

int const * aa = &i;// aa指向乙個 const 值,不能修改它指向的物件的值

int * const &aa = &cc;// aa是引用,其它與第一條類似

int const * &aa;// aa是引用,其它與第二條類似

在 const 遇到 * 時,const 在 * 之前表示 const 型別,const 在 * 之後表示 const 指標

3樓:

也許你知道通常乙個變數可以將其位址賦給指標常量吧,比如:

int a = 7;

const int *b = &a;

這樣的**是能編譯通過並順利執行的。通常這樣的**被用在函式形參初始化上,由於可能函式屬於const函式,不允許在函式中改變其值,所以,將形參定義為const int*,它既可以獲得int的位址,也可以獲得const int的位址~

你的問題跟我上面所說的類似,由於它在某些地方有一定用處,因此編譯器對類似這樣的情況語法限制比較寬鬆~它屬於ansi標準的一部分,因此這種寬鬆不是什麼bug

4樓:科技鳥

這裡aa是常量指標,不可以修改它的初始位址,但是初始化總要吧,初始化無所謂改變位址,所以是可以的。

c++中的const的用法

5樓:傅夏生

個人的一些筆記,希望可以幫助你

const 的使用

const經常用來修飾乙個值不能改變的量,安全,並且能消除儲存操作

const的幾種用法:

(1) 說明值常量

(2) 說明指標

(3) 說明函式引數及其返回值

(4) 說明類的常量和成員函式

const 說明值常量

值常量的說明一般放在標頭檔案或者檔案的開始部分,也可以放在類中進行說明

(1) 說明符號常量,表明符號代表的是乙個常量,語法:

《型別》const《常量名》=《表示式》,《常量名》=《表示式》……

例如:double const pi=3.14; const double pi=3.14;

(2) 說明陣列常量,語法格式:

《型別》const《陣列名》[大小]=;

const型別》 《陣列名》[大小]=;

(3) 說明物件常量,語法格式:

《類名》const《物件名》;

const 《類名》 《物件名》;

(4) 說明引用常量

(5) const與c語言中的#define的差別

無參巨集不是符號常量,沒有資料型別,沒有值,在記憶體中不分配位址。它在預處理時做巨集替換,不可能做型別檢查。

const定義的常量是符號常量,有資料型別,也有值,且其值不可改變,在記憶體中有位址,編譯時做型別檢查。

const和指標

const和指標的三種經典組合

(1) 指向常量的指標——const int *p;

(2) 常指標——char *const pc=』a』;

(3) 指向常量的常指標——const char *const pc=』a』

指向常量的指標(指標指向乙個不可變數)

指標在指向有乙個常量後,不能通過指標修改這個常量,但是可以指向乙個新的常量,例如:

const char *pc=」abcd」;

pc[3]=』a』;不合法,企圖修改原來指向的常量

pc=「wert」;合法指向另外乙個常量

常指標要把指標變數中的值(也就是位址)宣告為常量,採用以下語法:

《類那些》*const《指標名》[=《初值》;]

這樣定義的指標變數中存放的指標是個常量,稱為常指標。定義後,該指標指向固定的記憶體單元,不能再指向其他記憶體單元,通過它可以修改所指單元裡存放的內容。例如:

char *const pc=」abcd」;

pc[3]=』a』;合法,指標指向的物件可以修改

pc=」qwer」;不可以,指標的指向不可以修改

指向常量的常指標

指標變數中存放的指標本身和指標所指向的物件都是不可以改變的。

例如:const char *const pc=」asdf」;

pc[3]=』a』;不合法,不能改變指標所指物件的值

pc=」qwer」;不合法,不能改變指標的指向

const說明函式引數和返回值

用const限定函式引數和返回值,是const最重要的用法。用const修飾函式引數意味著傳過來的實參在函式中是不能被修改的。一般情況下不需要,但是在用指標和引用傳值的場合,為避免實參被修改,就用const修飾,更安全。

修飾函式的返回值,意味著該返回值不能被修改。如果傳值並返回位址,const將保證該位址上的內容不會被改變。這就意味著該函式不能作為左值使用,在這種情況下,const通常也是與引用和指標一起使用的。

類中的const

1. 常成員的函式

2. 常資料成員

3. 常物件

6樓:惠智傑

我來說一下,具體原因應該是這個,常變數在定義的時候必須初始化,所以當你在a.cpp中定義extern const double pi=3.14; b.

pp中extern const double pi;可以通過編譯執行。因為當編譯系統發現a.cpp中的全域性常變數時,就知道它pi是常量,而換過來的時候,在a.

cpp中定義const double pi=3.14; b.pp中extern const double pi;編譯系統在編譯a.

cpp是沒有問題的,但到了b.cpp中就會發現,有乙個外部常量是沒有初始化的,而常量是不能在宣告後再進行定義的,所以編譯系統會認為找不到它的定義,所以就出錯。

對於extern "c"主要是因為c和c++編譯器不同,它們對相同的函式名編譯後生成的相同的標示不同,故而在引用c的庫檔案時必須使用extern 「c」告訴編譯器,它是c的函式,按c的規則編譯。通常我們使用的標準標頭檔案已被處理過。 貌似沒有用於常量的宣告。

7樓:97樂於助人

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

8樓:匿名使用者

1,希望成員函式不改變成員的時候:比如:int a::print const {}

2,不希望指標去改變指向的記憶體空間:比如: const int* p;

3,不希望指標的指向被改變:比如: int *const p;

4,還有就是引用。。

9樓:秒懂百科

const:乙個c語言的關鍵字

10樓:匿名使用者

如果const用於定義乙個非指標的普通變數,就是定義了乙個常變數,這個變數以後的值在生命期內是不能改變的,因此也必須對該變數進行初始化,在c++中要在類的初始化列表中初始化。

如果const用於定義乙個指標變數,不同的寫法有不同的意思。例如const char *p和char* const p 前者表示p指向的內容是不能夠改變的,後者是指p本身的值是不能夠改變的。

如果用於修飾函式返回值,效果和修飾變數一樣。

const修飾類的成員函式,則該成員函式不能修改類中任何非const成員函式。一般寫在函式的最後來修飾。

const修飾類物件表示該物件為常量物件,在物件的生命期中其中的任何成員都不能被修改。

關於const用法還是比較複雜的,還有很多用法,我也沒有總結詳盡,以後遇到可以自己寫程式測試。

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

11樓:97樂於助人

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

12樓:旅春冬

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

13樓:我已經匿名了

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

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

c++中const的作用

14樓:謝興橋

影響是沒有,就是讓這個ch指標必須指向s->data(),不能指向其它的變數或函式

15樓:覺心

加了const指這是乙個常量指標,不加就是乙個簡單的指標。你要區別指標常量和常量指標。

16樓:秒懂百科

const:乙個c語言的關鍵字

c++裡面的const問題

17樓:天雨下凡

int x=5; //x並不是const變數,所以可以改變它的值

的值不能改變,且不能通過p改變指向處的值

//*p=7;是錯誤的,假設y也是int型變數,p=&y;也是錯誤的,但是x=7;是正確的

c++ 關於const的乙個問題

18樓:七彩虹科技****

使用const限定的成員函式不能改變類的成員變數的值,主要是為了保護成員變數不在該函式中被更改。 例如,有乙個成員變數int a,獲得成員變數a的函式 int void get_a()const; 這裡const表示get_a這個函式不能夠更改類的成員變數的值,但是可以使用,所以這時如果get_a的實現是: int void get_a() 這樣就不會出錯,而如果是:

int void get_a() 這樣就會報錯,因為函式改變了成員變數的值。 const限定函式的作用是在大型工程中保證封裝性,不能隨意暴露成員變數,成員變數的更改必須保證在特定函式,使用特定方法,只有這樣,才能保證軟體的安全性。

c 中Const用法?什麼時候需要用const?Const放在類成員函式後有什麼用?Con

醉酒逝流年 簡單的說,const代表初始化外的時候都不能修改值函式的引數寫const主要是為了防止你改變引數內容比如 void f cosnt int a 你在f的函式體裡修改了a就報錯 const在類成員函式後面表示這個函式不能用類裡面沒有const修飾的變數 c 中的類成員函式後面的const是...

C 中的string str問題

都不是。string是個類,string str,是定義乙個名叫str的字串物件。str內部儲存著字串的內容,通過str.c str 可以獲取這個字串的首位址。string str abc 這也不是將str賦值為 abc 的首位址,而是使用 abc 為值來初始化乙個string類。建議先補一下c 物...

C 中的建構函式問題,c 建構函式的問題

建構函式一般用來對類中的資料成員進行初始化工作,但並不是要對全部資料初始化,你只需要選擇自己需要的資料進行賦值即可。其實這一點從預設的建構函式也能看出來 當你沒有顯示的寫乙個建構函式的時候,編譯器會為你提供乙個預設的建構函式,它沒有引數,只有乙個空語句,也就是說它沒有對任何資料成員進行初始化。由於構...