C語言程式設計技巧關於const和define的區別心得

時間 2021-08-11 17:34:55

1樓:匿名使用者

1)#define是c語言中的預處理指令,也就是,#define定義的「常數」是編譯器進行編譯前,由前處理器將#define定義的符號替換掉。這個動作與我們在編輯文件時經常使用文字「替換」操作極為相似;正是這個原因,導致#define定義的常數不是「強型別」(嚴格地講,#define定義的只是文字)

3)c#中,利用const修飾符定義關鍵字是強型別的。所謂「強型別」是指:定義常量時必須指定常量的型別

2樓:風若遠去何人留

符號變數不分配記憶體,常變數分配記憶體。

你定義一個符號變數:#define pi 3.14

然後你的程式例如是這樣的:float a=pi*pi;定義了一個float變數a,其值是pi*pi。然後你的這個程式經過預編譯,變成了:

float a=3.14*3.14;3.

14原型替換了pi,所以不需要為pi這個符號變數分配記憶體,定義符號變數的意義只是在於方便理解,你看到3.14這個值不一定想到他是圓周率,但是看到pi你就知道他是3.14.

常變數其實和普通變數一樣,都是需要分配記憶體的,但是常變數的值是不能改變的。

為什麼說常變數優於符號變數,因為常變數安全:

例如:你定義一個符號變數#define pi 3.14+3.14

然後你的程式例如是這樣的:float a=pi*pi;定義了一個float變數a,其值是pi*pi。然後你的這個程式經過預編譯,變成了:

float a=3.14+3.14*3.

14+3.14; 3.14+3.

14原型替換了pi。

如果你定義常變數:const float pi=3.14+3.

14;如果你的程式:float a=pi*pi;定義了一個float變數a,其值是pi*pi。然後你的這個程式經過預編譯,變成了:

float a=(3.14+3.14)*(3.

14+3.14);

所以常變數更安全,不會出現上面的歧義。

const與#define相比有何優點

3樓:匿名使用者

程式設計師面試寶典中的敘述:

1,const 進行型別檢查

2. const支援一些編譯器的斷點除錯(以上兩點#define都不具有)

4樓:匿名使用者

編譯器檢查型別,避免巨集替換錯誤,如 #define t 1+1 t = t * 2; 你的答案應該是4, 但程式會輸出

版3, 因為 1+1*2 = 3, 但是如果你權用const 就不會出現這種問題。而且編譯器會在優化階段就幫你做完了這個計算,在一定程度上提升了執行的效率。

5樓:0白樺樹

如果寫的不高明,#define 有時會有詭異的bug

c語言中const有什麼用途

6樓:天雲一號

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常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為一個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。

7樓:匿名使用者

(1)可以定義 const 常量

8樓:千鋒教育

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)

9樓:匿名使用者

const是一個關鍵字,用它在c或c++中可以定義一個常量,特點是這個常量不可以在程式中被修改,一但被程式意外修改編譯器就會報錯。

關於C語言和程式設計,用C語言程式設計和用C 語言程式設計區別大嗎?

一 工欲善其事,必先利其器 這裡介紹幾個學習c語言必備的裝置和書籍 a 開發環境 例如turbo c 2.0,這個曾經佔據了dos時代開發程式的大半個江山。但是現在windows時代,用turbo c有感覺不方面,編輯程式起來很吃力,並且拖放,更沒有函式變數自動感應功能,查詢參考資料也不方便。建議使...

C語言程式設計,C語言程式設計

很多程式都是非常簡單的 1.輸入2個正整數m和n,求其最大公約數和最小公倍數 include include int main 3.程式設計計算從1到10各數階乘的和,即1 2 3 9 10 的和 include int main void printf 1到10各數階乘的和 d n sum ret...

C語言程式設計,c語言的程式設計

給十分寫那麼多。給你說第一個吧。輸入十個數,用一個for語句就好了。int a 10 for int i 0 i 10 i 最大數。int max a 0 int m for int j 0 j 10 j a i a 9 a 9 max 小數的變下符號就是了。c語言程式設計 摘要。親親具體什麼問題呀...