問乙個關於const變數的問題

2025-02-06 16:50:13 字數 2597 閱讀 8258

1樓:網友

這個問題是在於。

const int j = 1;

那麼j就固定為1了,不能改變了。

i = int *)j;

這裡將i指向了j,那麼修改i的指標所指的數就會出錯了,i = 4; /錯誤。

這裡正是錯誤,因為修改了i指向的記憶體,實際就是修改了j,而j則是定義成了不能被修改的。

2樓:湛藍水晶

從現象上來說,只能說常量區和變數區是分開編址的。

ps.這個問題和c和c++下結果不一樣,在c下是直接將const的值修改了,但是c++下就出現你說的這種情況。

全域性變數和const定義是什麼?

3樓:惠企百科

全域性變數的定義為本函式和其他函式所共用。

const定義是指使用型別修飾符const說明的型別。

一、全域性變數。

全域性變數是程式設計術語中的一種,源自於變數之分。

變數分為區域性與全域性,區域性變數又可稱之為內部變數。

變數由某物件或某個函式所建立的變數通常都是區域性變數,只能被內部引用,而無法被其它鏈鉛物件或函式引用。

全域性變數既可以是某運悔物件函式建立,也可以是在本程式任何地方建立。

全域性變數旁喚正是可以被本程式所有物件或函式引用。

二、const(c中的const)

const是乙個c語言(ansi c)的關鍵字,具有著舉足輕重的地位。

const它限定乙個變數不允許被改變,產生靜態作用。

使用const在一定程度上可以提高程式的安全性和可靠性。

清晰理解const所起的作用,對理解對方的程式也有一定幫助。

const在其它程式語言中也有出現,例如pascal、c++、php5、b#.net、hc08 c、c#等。

const型別的成員函式內部如何改變成員變數

4樓:甦醒的冰塊

通過指標也能實現。

在c++中,由const修飾的成員函式的函式體內部,是不能夠對成員變數進行修改的。這個特性被用來保證某些成員函式在實現過程中,避免由於程式設計師大意而對資料進行了錯誤的修改;同時也說明此成員函式是非修改性的。如只需要返回成員變數的成員函式就被宣告為const型別(const的位置在函式定義引數列表之後)

推廣開來,在const成員函式中也不能夠呼叫非const的成員函式。這是因為非const成員函式可能會改變成員變數的值,這與const成員函式的定義相違背。

但是在某些情況下,需要在const函式中改變成員變數。這就需要把成員變數設定成mutable型別。如class cprivate:

mutable int i;};如果變數i不宣告為mutable型別,則編譯不會通過。

如果成員變數是乙個類型別或者結構型別,而在const函式中呼叫這些變數的成員函式,除了用mutable宣告外,還可以用一種變通的方法:class d}class cprivate:mutable int i;d cd;};然後在呼叫時,引數d& d以*this作為輸入,也可以達到呼叫非const函式的作用。

最近閱讀相關的文章,又學到了一種方法,能夠使得在const成員函式中呼叫非const成員函式。就是使用const_cast《運算子。它能夠使得const去掉const的屬性,使得violate屬性去掉violate屬性。

上面的例子就可以寫成。

const可用於定義全域性變數嗎

5樓:我買了蘋果

1、在函式之外定義的變數稱為外部變數,外部變數是全域性變數(也稱全程變數)。 全域性變數可以為本函式和其他函式所共用。

2、const(常型別)是指使用型別修飾符const說明的型別,用常型別定義的變數或物件的值是不能被改變的。

3、全域性變數和const沒有必然的聯絡,當然你可定義全域性const型別,是否為全域性變數決定於變數出現的位置。

const的變數與常量

6樓:草泥巴胥

例:為什麼下面的例子在使用乙個const變數來初始化陣列,ansi c的編譯器會報告乙個錯誤呢?

const int n = 5;

int a[n];

答案與分析:

1)這個問題討論的是「常量」與「唯讀變數」的區別。常量,例如5, abc,等,肯定是隻讀的,因為常量是被編譯器放在記憶體中的唯讀區域,當然也就不能夠去修改它。而「唯讀變數」則是在記憶體中開闢乙個地方來存放它的值,只不過這個值由編譯器限定不允許被修改。

c語言關鍵字const就是用來限定乙個變數不允許被改變的修飾符(qualifier)。上述**中變數n被修飾為唯讀變數,可惜再怎麼修飾也不是常量。而ansi c規定陣列定義時長度必須是「常量」,「唯讀變數」也是不可以的,「常量」不等於「不可變的變數」。

但是在c++中,區域性陣列是可以使用變數作為其長度的。

2)但是在標準c++中,這樣定義的是乙個常量,這種寫法是對的。實際上,根據編譯過程及記憶體分配來看,這種用法本來就應該是合理的,只是ansi c對陣列的規定限制了它(實際上用gcc或vs2005編譯以上**,確實沒有錯誤產生,也沒有給出警告)。

3)那麼,在ansi c中用什麼來定義常量呢?答案是enum型別和#define巨集,這兩個都可以用來定義常量。

問關於情感問題,問一個關於情感問題?

如果你和你女朋友的感情是經過了長久的考驗後突然出現這樣的問題的話,那我就得說你一句了,是你可能不夠關心人家可能讓別人覺得有點灰心了,如果你們的感情還不是很瞭解的話,你是不是該想下你的她是拜金主義者還是浪漫主義者,如果是拜金者,你就得考慮下你的經濟實力了,如果是浪漫主義者,那你就是可能疏忽了她愛浪漫的...

問關於人的問題,問一個關於人的問題

這個其實是一種巧合 假如你旁邊的幾個人突然同時不說話了 你肯定會想知道發生了什麼事 於是也停止說話 這種反應不斷擴散 就會造成所有人都同時不說話 其實是一種巧合加上自我保護的從眾心理 這種現象在歐洲神話中有另外一個解釋 說是這個時候是有天使經過 呵呵 我是學生,打個比方 假如在自修課上,全班都在講空...

求,問關於法律的問題,求,問一個關於法律的問題?

樓主,我只是提醒不算回答,你要不要去申請一個設計新型的專利權?或者如果可以稱為發明的話,申請一個發明專利。這樣的話,你就擁有了受保護的智慧財產權,你可以和公司簽訂一個專用的授權,或者將專利整體轉讓給公司。按照你的描述,必須有你在公司才能使用該軟體的話,我建議是你給公司簽訂比如十年的授權使用 不是買斷...