const 和 volatile 在c語言中有何區別 const定義的值不能被修

2021-12-28 07:37:00 字數 5180 閱讀 3306

1樓:

const定義的值不能被修改

volatile可以 volatile的意思是它定義的變數很可能被修改 程式每次讀這個變數時不是從暫存器讀而是從記憶體讀 防止該值發生了改變

2樓:匿名使用者

首先,定義為const 的值 是可以改變的!

舉例說明吧 方法如下(你可以嘗試哦)

const int i= 100;

int* p = &i;

*p = 5;

printf("%d\n",i);

其次,volatile 定義的變數 是不能被優化;主要是防止被第三方改變!

被volatile 定義的變數,每次讀它的值時都會從其記憶體單元讀,而不是暫存器!

3樓:專業保證

const 表示只讀 const num=5 為啥不用define num 5呢?

const表示這個變數是隻讀的。 define 則是替換所有num 沒有num這個變數 **是用5替換的。

volatile 表示異變的值,每次重新讀取,不會讀取記憶體中的值。比如你使用了 volatile定義的值 num,這個時候另外一個人改變了num這個值,你必須重新去讀取這個變數的地址取得這個值,而不是用你之前讀取的值。主要是方便兩者之一改變這個變數時,雙方都能取得最新的值。

c語言中的volatile是什麼意思?怎麼用?謝了

4樓:悶聲發大才

一個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在暫存器裡的備份

5樓:匿名使用者

volatile的本意是「易變的」,volatile定義的變數它的值在編譯時是會改變的,跟const相反,而const定義的變數一直不會變的,如果變數加上volatile修飾,則編譯器保證對此變數的讀寫操作都不會被優化(肯定執行)。

6樓:輕舞飛揚張哈

c語言關鍵字volatile,表示不經過賦值,其值也可能被改變

7樓:

簡單的理解就是這個變數可能會被外部函式改變,為了讓這個改變能有效執行,不被編譯器優化掉。

舉個例子吧,一個函式用了一個外部的變數,但這個變數在此函式中沒有改變,只是引用,這時候編譯器會去做優化,把它的值暫放在內部暫存器中,用的時候讀取的是暫存器的值,而不是去訪問它的地址取值,這樣的話,當這個變數在外部發生了變化的時候,比如中斷,或者另外的程序等等。但在這個函式裡面就不能起作用,因為被優化後使用的是暫存器的值,還是原來的值,導致錯誤發生。這種情況下,就要加上這個定義,就不會被優化了。

c語言 中volatile關鍵字的用法

8樓:百物電腦配件店

volatile是個多執行緒變數,就是可能在很多函式中會修改他。特別是中斷函式中一定要用他。volatile的意思就是「不穩定的」可能突發地改變它,微控制器每次呼叫他的話,都要從他的地址取數。

預防微控制器不知道普通的變數改變了,還是用上一次的資料。

定義方法是 :

volatile char i; //定義一個字元型的多執行緒變數"i"

volatile int j; //定義一個整型的多執行緒變數"j"

記得給我打個辛苦分!哈哈

9樓:魔群領袖

我就用上面的例子吧

volatile int i = 10;

int k = i;

這段**如果沒有加上volatile,它的執行過程是 i = 10, 10 ->reg暫存器,k = reg值,就是說,k=i實際上是從暫存器裡讀出來的。這樣快捷高效,當然並不是每次都這樣,因為暫存器有限。如果在10->reg暫存器的時候,i儲存的記憶體變化了,也就是別的執行緒修改了i的值,k=i仍然會按照i=10來執行

加上volatile後,執行過程是 i = 10, k = *(int *)(&i); 它會從i的記憶體地址上去讀,當然值會非常準確,但是效率會比從暫存器中讀要慢很多。

10樓:土豆遇見熊

volatile int i = 10;

int k = i;

這段**如果沒有加上volatile,它的執行過程是 i = 10, 10 ->reg暫存器,k = reg值,就是說,k=i實際上是從暫存器裡讀出來的。這樣快捷高效,當然並不是每次都這樣,因為暫存器有限。如果在10->reg暫存器的時候,i儲存的記憶體變化了,也就是別的執行緒修改了i的值,k=i仍然會按照i=10來執行

加上volatile後,執行過程是 i = 10, k = *(int *)(&i); 它會從i的記憶體地址上去讀,當然值會非常準確,但是效率會比從暫存器中讀要慢很多。

c語言中const有什麼用途

11樓:靠名真tm難起

可以定義const常量,具有不可變性。

例如:const int max=100; max++會產生錯誤;

便於進行型別檢查,使編譯器對處理內容有更多瞭解,消除了一些隱患。

例如: void f(const int i) 編譯器就會知道i是一個常量,不允許修改;

可以避免意義模糊的數字出現,同樣可以很方便地進行引數的調整和修改。 同巨集定義一樣,可以做到不變則已,一變都變!

如(1)中,如果想修改max的內容,只需要它修改成:const int max=you want;即可!

可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。 還是上面的例子,如果在函式體內修改了i,編譯器就會報錯;

例如: void f(const int i)

可以節省空間,避免不必要的記憶體分配。 例如:

#define pi 3.14159 //常量巨集

const double pi=3.14159; //此時並未將pi放入ram中 ......

double i=pi; //此時為pi分配記憶體,以後不再分配!

double i=pi; //編譯期間進行巨集替換,分配記憶體

double j=pi; //沒有記憶體分配

double j=pi; //再進行巨集替換,又一次分配記憶體!

const定義常量從彙編的角度來看,只是給出了對應的記憶體地址,而不是像#define一樣給出的是立即數,所以,const定義的常量在程式執行過程中只有一份拷貝,而#define定義的常量在記憶體中有若干份拷貝。

6. 提高了效率。

編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為一個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。

擴充套件資料:const是一個c語言(ansi c)的關鍵字,具有著舉足輕重的地位。它限定一個變數不允許被改變,產生靜態作用。

使用const在一定程度上可以提高程式的安全性和可靠性。另外,在**別人**的時候,清晰理解const所起的作用,對理解對方的程式也有一定幫助。另外const在其它程式語言中也有出現,例如pascal、c++、php5、b#.

net、hc08 c、c#等。

12樓:天雲一號

const修飾的資料型別是指常型別,常型別的變數或物件的值是不能被更新的。

const關鍵字的作用主要有以下幾點:

(1)可以定義const常量,具有不可變性。 例如:

const int max=100; int array[max];

(2)便於進行型別檢查,使編譯器對處理內容有更多瞭解,消除了一些隱患。例如: void f(const int i) 編譯器就會知道i是一個常量,不允許修改;

(3)可以避免意義模糊的數字出現,同樣可以很方便地進行引數的調整和修改。

(4)可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。 還是上面的例子,如果在函式體內修改了i,編譯器就會報錯; 例如:

void f(const int i)

(5) 為函式過載提供了一個參考。

class a //一個函式

void f(int i) const //上一個函式的過載 ......

}; (6) 可以節省空間,避免不必要的記憶體分配。 例如:

#define pi 3.14159 //常量巨集

const doulbe pi=3.14159; //此時並未將pi放入rom中 ......

double i=pi; //此時為pi分配記憶體,以後不再分配!

double i=pi; //編譯期間進行巨集替換,分配記憶體

double j=pi; //沒有記憶體分配

double j=pi; //再進行巨集替換,又一次分配記憶體!

const定義常量從彙編的角度來看,只是給出了對應的記憶體地址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程式執行過程中只有一份拷貝,而#define定義的常量在記憶體中有若干個拷貝。

(7) 提高了效率。 編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為一個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。

13樓:匿名使用者

(1)可以定義 const 常量

14樓:千鋒教育

const是一個c語言的關鍵字,它限定一個變數不允許被改變。使用const在一定程度上可以提高程式的安全性和可靠性。另外,在**別人**的時候,清晰理解const所起的作用,對理解對方的程式也有一些幫助。

另外const在其他程式語言中也有出現,如c++、php5、c#.net、hc08 c。

(1)可以定義const常量,具有不可變性。

例如:const int max=100; max++會產生錯誤;

(2)便於進行型別檢查,使編譯器對處理內容有更多瞭解,消除了一些隱患。

例如: void f(const int i) 編譯器就會知道i是一個常量,不允許修改;

(3)可以避免意義模糊的數字出現,同樣可以很方便地進行引數的調整和修改。 同巨集定義一樣,可以做到不變則已,一變都變!

如(1)中,如果想修改max的內容,只需要:const int max=you want;即可!

(4)可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。 還是上面的例子,如果在函式體內修改了i,編譯器就會報錯;

例如: void f(const int i)

4 請問,在C 類中如何初始化const和static資料成員

const資料成員只能在成員初始化列表進行初始化,static資料成員只能在類外進行初始化。static const資料成員既可以在宣告時初始化,也可以在類外初始化。下面是一個例子 include using namespace std class a public a ci 1 void outp...

c和c 中const用法具體的區別是什麼

c中的const,功能比較單一,較容易理解 作用 被修飾的內容不可更改。使用場合 修飾變數,函式引數,返回值等。c 中應用場合要豐富的多 特點 是執行時const,因此不能取代 define用於成為陣列長度等需要編譯時常量的情況。同時因為是執行時const,可以只定義而不初始化,而在執行時初始化。如...

bigbang和super junior 在韓國那個紅

個人覺得是bigbang,一般他們的歌曲一出,基本全上排行榜,而且mcountdown的收視率前三也有他們。bb從來人氣就比sj高,而且高很多呢!可以上網查啊。bb人氣高的嚇人,sj在韓國只能算個二流組合。這不是我個人認為的,這是事實哦!還有都說在中國bb沒sj人氣高,那是因為除了2010mama頒...