課程
/后端開發
/C
/C語言入門
rt,如果不刪除第五行 編譯出錯
2015-01-10
源自:C語言入門 2-7
正在回答
嚴格意義上來講,C語言并沒有絕對的常量這個概念。const是一個C語言的關鍵字,它限定了一個變量不允許被改變。
例如:下面代碼
#define N 10
int main()
{
? int arr[N]; ?//編譯通過,因為這里N被宏替換為10?
? return 0;
}
但是,
? ?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 *pa = &a; //或者int const *pa=&a;
-------------------------------------------------------------------------
說這番話的目的想告訴大家,C由于是個比較原始古老的語言,在設計初考慮的不像C++,Java等這些語言嚴謹。對于常量在C中,其實沒有嚴格意義上的常量類型。const的目的只是限定一個變量不允許修改,換句話說,它的值對這個符號來說是只讀的,但是并不能防止通過程序的內部(或者說外部)的方法來修改這個值。所以,我可以簡單理解為const是修飾的變量只是一個只讀的變量而已。
安52
慕哥0928960
你確定能這么定義? 只能以字母下劃線數字組成,以字母下劃線開頭
在程序中無法改變符號常量的值。若想改變,需要在定義時改變。
用最簡單的理解方法就是:宏定義(即define)的作用就是在程序進行編譯時,編譯器自動將定義的內容,比如 10
粘貼并替換到你所寫的程序中,也就是你所寫的
#include <stdio.h>
#define POCKETMONEY 10 ? ?//定義常量及常量值
? ? ?//小明私自增加零花錢對嗎?
? ? printf("小明今天又得到%d元零花錢\n", POCKETMONEY);
????//這上面這段代碼在編譯時就變成下面這行
?????printf("小明今天又得到%d元零花錢\n", 10);
? ? return 0; ?
謝謝你的回復!
#define POCKETMONEY 10
這一句并不是定義一個變量。
#define 是一個預處理指示,預處理器會把代碼中的?POCKETMONEY 替換成 10,再交給編譯器編譯。所以你的代碼就是
printf("小明今天又得到%d元零花錢\n",?10);
所謂“常量”的概念編譯器是不知道的,因為交給編譯器的代碼中根本就沒有'POCKETMONEY'這個符號。
這種寫法通常是為了方便我們編程。假設代碼中有很多地方寫了 10 這個字面量,但突然你想要把 10 改成 20,那么就需要在整個代碼中搜索10,還必須確定這個'10'是你想要改的那個量,實在是很麻煩,且容易出錯。 所以就用#define定義一個10的“代號”,這樣如果你想改動這個值,只需要把#define中的10改掉即可。
但是,這種寫法是不推薦的??!
原因如上所說,因為編譯器并不知道'POCKETMONEY'這個符號,所以也無法進行相應的類型檢查之類的,除了錯誤也無法正確提示,會帶來無窮無盡的問題...
推薦的寫法是:
用const關鍵字來定義一個變量,這種用const修飾過的變量的值是無法更改的,這樣就有了“常量”的語義。
好喜歡taeyeon啊_ 提問者
dire
onemoo 回復 dire
舉報
C語言入門視頻教程,帶你進入編程世界的必修課-C語言
3 回答符號常量可以在main()中進行賦值么?
3 回答我先定義變量在賦值不可以么?
1 回答賦值常量大道
1 回答字符常量 可不可以看作 字符串常量,謝謝
1 回答#新手的迷惑#教程不可改變的常量中定義了一個常量,再在main函數里賦同樣的值值也提示error
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-01-12
嚴格意義上來講,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是修飾的變量只是一個只讀的變量而已。
2017-01-24
只能以字母下劃線數字組成,以字母下劃線開頭
2016-04-06
在程序中無法改變符號常量的值。若想改變,需要在定義時改變。
2016-01-01
用最簡單的理解方法就是:宏定義(即define)的作用就是在程序進行編譯時,編譯器自動將定義的內容,比如 10
粘貼并替換到你所寫的程序中,也就是你所寫的
#include <stdio.h>
#define POCKETMONEY 10 ? ?//定義常量及常量值
int main()
{
? ? ?//小明私自增加零花錢對嗎?
? ? printf("小明今天又得到%d元零花錢\n", POCKETMONEY);
????//這上面這段代碼在編譯時就變成下面這行
?????printf("小明今天又得到%d元零花錢\n", 10);
? ? return 0; ?
}
2015-05-23
謝謝你的回復!
2015-01-11
#define POCKETMONEY 10
這一句并不是定義一個變量。
#define 是一個預處理指示,預處理器會把代碼中的?POCKETMONEY 替換成 10,再交給編譯器編譯。所以你的代碼就是
所謂“常量”的概念編譯器是不知道的,因為交給編譯器的代碼中根本就沒有'POCKETMONEY'這個符號。
這種寫法通常是為了方便我們編程。假設代碼中有很多地方寫了 10 這個字面量,但突然你想要把 10 改成 20,那么就需要在整個代碼中搜索10,還必須確定這個'10'是你想要改的那個量,實在是很麻煩,且容易出錯。 所以就用#define定義一個10的“代號”,這樣如果你想改動這個值,只需要把#define中的10改掉即可。
但是,這種寫法是不推薦的??!
原因如上所說,因為編譯器并不知道'POCKETMONEY'這個符號,所以也無法進行相應的類型檢查之類的,除了錯誤也無法正確提示,會帶來無窮無盡的問題...
推薦的寫法是:
用const關鍵字來定義一個變量,這種用const修飾過的變量的值是無法更改的,這樣就有了“常量”的語義。