c 中的const關鍵字

2021-09-29 01:49:40 字數 949 閱讀 4571

以上**執行時是會報錯的。

首先「hello world」這是乙個常量,是存放在**段中的。是不可改變的。

因為char *s=「hello world」 這句**只會將「hello world」在**段中的位址交給s這個指標。

所以下面的那句s[0]='b', 是通過s這個指標訪問**段中的「hello world」這個常量,因為常量是不可更改的,所以程式會報錯。

所以,其實,對於第一句指標s的定義,正確的是在其前面加上乙個const關鍵字,告訴程式,這個常量是不可更改的。

以上程式正確的寫法如上。

char s="hello world" 這句**,首先宣告的s是乙個陣列,所以在棧中給s這個陣列分配乙個很大的空間。

之後的賦值運算子,會將**段中的「hello world」拷貝到棧中,所以下面的s[0]='b' 不會報錯。

由以上的分析可以看出,在程式中通過拷貝傳遞這個物件,需要在棧中分配記憶體並進行拷貝,這會花費很大的空間和時間。

所以,我們最好是只傳物件的指標,但是這樣的話,我們沒辦法保證程式後面的**不會對指標指向的物件進行修改,由此,引出了使用const的必要性。

當我們確定不會對某個物件進行修改的時候,最好是將其定義成const,這樣可以保證程式在之後都不能修改當前物件。

再乙個問題:

當我們在乙個類的成員函式的後面加上乙個const,則這個函式就變成了常量成員函式。常量成員函式不能改變呼叫它的物件的內容!【這是因為加上const之後,類的變成了指向常量的常量指標。所以不能改變this指向的內容了】

this指標由date *const 變成了 const date *const

C中const關鍵字

const 用法 定義常量,修飾指標 函式的輸入引數和返回值,把定義或者修飾的變數屬性設為唯讀。本質上它只是在全域性資料段或者棧中定義的是乙個唯讀的常量,不是真正位於字串常量區。所以關鍵字const 並不能把變數變成真正的常量,事實上還是可以改變 const 定義的變數的值。const 的目的是為了...

C 中const關鍵字

一 const修飾指標變數 int num 0 1.const在 前面,表示const修飾指標指向的內容 const int p intconst p 2.const在 後面,表示const修飾指標變數 int const p 二 const修飾成員函式首先來看一下普通成員函式 class a fu...

C 中」const「關鍵字

關於c 中的const關鍵字的用法非常靈活,而使用const將大大改善程式的健壯性,現將本人的一些體會總結如下,期望對大家有所幫助 一 丶const基礎 如果const關鍵字不涉及到指標,我們很好理解,下面是涉及到指標的情況 int b 500 const int a b 1 int const a...