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頒...