亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

符號常量可以在main()中進行賦值么?

rt,如果不刪除第五行 編譯出錯

正在回答

6 回答

嚴格意義上來講,C語言并沒有絕對的常量這個概念。const是一個C語言的關鍵字,它限定了一個變量不允許被改變。

例如:下面代碼

#define N 10

int main()

{

? int arr[N]; ?//編譯通過,因為這里N被宏替換為10?

? return 0;

}

但是,

int main()

{

? ?int const N =10;

? ?int arr[N]; //編譯不通過,因為編譯器認為N是個變量,不是常量。只不過這個變量不允許被修改

}

而且在C語言中被const修飾的就一定是常量嗎?真的能不動如山嗎?

例如下面代碼:

const int a = 10;

int *pa = &a;

*pa = 20;

printf("%d/n",*pa);

printf("%d/n",a);

編譯時候,只是有個警告并沒有錯誤,而且運行時,a的值也修改為20了。


要真正保證不能修改a,代碼修改如下:

const int a = 10;

const int *pa = &a; //或者int const *pa=&a;

*pa = 20;

printf("%d/n",*pa);

printf("%d/n",a);

-------------------------------------------------------------------------

說這番話的目的想告訴大家,C由于是個比較原始古老的語言,在設計初考慮的不像C++,Java等這些語言嚴謹。對于常量在C中,其實沒有嚴格意義上的常量類型。const的目的只是限定一個變量不允許修改,換句話說,它的值對這個符號來說是只讀的,但是并不能防止通過程序的內部(或者說外部)的方法來修改這個值。所以,我可以簡單理解為const是修飾的變量只是一個只讀的變量而已。

33 回復 有任何疑惑可以回復我~
#1

安52

換行符錯了\n
2016-11-01 回復 有任何疑惑可以回復我~
#2

慕哥0928960

回答得好專業啊嘻嘻
2017-12-01 回復 有任何疑惑可以回復我~


588775cd0001173d04840288.jpg你確定能這么定義?
只能以字母下劃線數字組成,以字母下劃線開頭

0 回復 有任何疑惑可以回復我~

在程序中無法改變符號常量的值。若想改變,需要在定義時改變。

3 回復 有任何疑惑可以回復我~

用最簡單的理解方法就是:宏定義(即define)的作用就是在程序進行編譯時,編譯器自動將定義的內容,比如 10

粘貼并替換到你所寫的程序中,也就是你所寫的

#include <stdio.h>

#define POCKETMONEY 10 ? ?//定義常量及常量值

int main()

{

? ? ?//小明私自增加零花錢對嗎?

? ? printf("小明今天又得到%d元零花錢\n", POCKETMONEY);

????//這上面這段代碼在編譯時就變成下面這行

?????printf("小明今天又得到%d元零花錢\n", 10);

? ? return 0; ?

}


0 回復 有任何疑惑可以回復我~

謝謝你的回復!

0 回復 有任何疑惑可以回復我~

#define POCKETMONEY 10

這一句并不是定義一個變量。

#define 是一個預處理指示,預處理器會把代碼中的?POCKETMONEY 替換成 10,再交給編譯器編譯。所以你的代碼就是

printf("小明今天又得到%d元零花錢\n",?10);

所謂“常量”的概念編譯器是不知道的,因為交給編譯器的代碼中根本就沒有'POCKETMONEY'這個符號。

這種寫法通常是為了方便我們編程。假設代碼中有很多地方寫了 10 這個字面量,但突然你想要把 10 改成 20,那么就需要在整個代碼中搜索10,還必須確定這個'10'是你想要改的那個量,實在是很麻煩,且容易出錯。 所以就用#define定義一個10的“代號”,這樣如果你想改動這個值,只需要把#define中的10改掉即可。

但是,這種寫法是不推薦的??!

原因如上所說,因為編譯器并不知道'POCKETMONEY'這個符號,所以也無法進行相應的類型檢查之類的,除了錯誤也無法正確提示,會帶來無窮無盡的問題...

推薦的寫法是:

const關鍵字來定義一個變量,這種用const修飾過的變量的值是無法更改的,這樣就有了“常量”的語義。

14 回復 有任何疑惑可以回復我~
#1

好喜歡taeyeon啊_ 提問者

thx
2015-01-11 回復 有任何疑惑可以回復我~
#2

dire

"因為編譯器并不知道'POCKETMONEY'這個符號,所以也無法進行相應的類型檢查之類的,除了錯誤也無法正確提示,會帶來無窮無盡的問題..." 問:如果不是常量的話 就是普通的變量的話 c語言會怎么對它進行相應的類型檢查呢?會帶來怎么樣的無窮無盡的問題呢
2015-05-22 回復 有任何疑惑可以回復我~
#3

onemoo 回復 dire

這就是一個整型字面量。它的類型一般是有符號的,但如果你用16進制或8進制的話,其類型也有可能是無符號??傊捎谀銢]有真正地定義這個變量,所以它可能和你的預期不一致,進而帶來非預料的行為。 也因為編譯器不知道POCKETMONEY這個符號,所以出錯的時候它也無法提示你'POCKETMONEY'有錯。
2015-05-23 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

符號常量可以在main()中進行賦值么?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號