第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

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

rt,如果不刪除第五行 編譯出錯(cuò)

正在回答

6 回答

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

例如:下面代碼

#define N 10

int main()

{

? int arr[N]; ?//編譯通過,因?yàn)檫@里N被宏替換為10?

? return 0;

}

但是,

int main()

{

? ?int const N =10;

? ?int arr[N]; //編譯不通過,因?yàn)榫幾g器認(rèn)為N是個(gè)變量,不是常量。只不過這個(gè)變量不允許被修改

}

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

例如下面代碼:

const int a = 10;

int *pa = &a;

*pa = 20;

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

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

編譯時(shí)候,只是有個(gè)警告并沒有錯(cuò)誤,而且運(yùn)行時(shí),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由于是個(gè)比較原始古老的語言,在設(shè)計(jì)初考慮的不像C++,Java等這些語言嚴(yán)謹(jǐn)。對于常量在C中,其實(shí)沒有嚴(yán)格意義上的常量類型。const的目的只是限定一個(gè)變量不允許修改,換句話說,它的值對這個(gè)符號來說是只讀的,但是并不能防止通過程序的內(nèi)部(或者說外部)的方法來修改這個(gè)值。所以,我可以簡單理解為const是修飾的變量只是一個(gè)只讀的變量而已。

33 回復(fù) 有任何疑惑可以回復(fù)我~
#1

安52

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

慕哥0928960

回答得好專業(yè)啊嘻嘻
2017-12-01 回復(fù) 有任何疑惑可以回復(fù)我~


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

0 回復(fù) 有任何疑惑可以回復(fù)我~

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

3 回復(fù) 有任何疑惑可以回復(fù)我~

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

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

#include <stdio.h>

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

int main()

{

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

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

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

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

? ? return 0; ?

}


0 回復(fù) 有任何疑惑可以回復(fù)我~

謝謝你的回復(fù)!

0 回復(fù) 有任何疑惑可以回復(fù)我~

#define POCKETMONEY 10

這一句并不是定義一個(gè)變量。

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

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

所謂“常量”的概念編譯器是不知道的,因?yàn)榻唤o編譯器的代碼中根本就沒有'POCKETMONEY'這個(gè)符號。

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

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

原因如上所說,因?yàn)榫幾g器并不知道'POCKETMONEY'這個(gè)符號,所以也無法進(jìn)行相應(yīng)的類型檢查之類的,除了錯(cuò)誤也無法正確提示,會帶來無窮無盡的問題...

推薦的寫法是:

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

14 回復(fù) 有任何疑惑可以回復(fù)我~
#1

好喜歡taeyeon啊_ 提問者

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

dire

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

onemoo 回復(fù) dire

這就是一個(gè)整型字面量。它的類型一般是有符號的,但如果你用16進(jìn)制或8進(jìn)制的話,其類型也有可能是無符號。總之由于你沒有真正地定義這個(gè)變量,所以它可能和你的預(yù)期不一致,進(jìn)而帶來非預(yù)料的行為。 也因?yàn)榫幾g器不知道POCKETMONEY這個(gè)符號,所以出錯(cuò)的時(shí)候它也無法提示你'POCKETMONEY'有錯(cuò)。
2015-05-23 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

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

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號