C 語(yǔ)言基礎(chǔ)之初識(shí) C 語(yǔ)言常量
C語(yǔ)言中的常量分為以下幾種:
- 字面常量
- const修飾的常變量
- #define定義的標(biāo)識(shí)符常量
- 枚舉常量
1、字面常量
即字面意思不能改變的量。如1就是1,你不能說(shuō)讓1等于2;如人的血型有固定的幾種(A,B,O,AB);如人的性別也只分為男性,女性,以及更深?yuàn)W的一種形態(tài)。
在C語(yǔ)言中:1
,3.14
,‘a'
,“hello
”…這些都叫做常量。
2、const修飾的常變量
可以通過(guò)一段代碼來(lái)理解const修飾的常變量:
int num = 10; printf("%d\n", num); //num=10 num = 5; printf("%d\n", num); //num=5
上面這段代碼中 num
是一個(gè)變量,通過(guò)你給num賦新的值,num就不停的在改變。
但是當(dāng)你在數(shù)據(jù)類(lèi)型前面加上const
,num
就發(fā)生微妙的改變。(自己可以在編譯器上使用看看)
const int num = 10; printf("%d\n", num); //編譯產(chǎn)生報(bào)錯(cuò) num = 5; printf("%d\n", num);
當(dāng)你編譯后,結(jié)果會(huì)產(chǎn)生報(bào)錯(cuò):
因?yàn)榇藭r(shí)num
在const
修飾下已經(jīng)變成了常變量,而變量是不可以被修改的。
但是num
此時(shí)不能完全叫做常量,它歸根結(jié)底還是變量。如它不能在數(shù)組定義的時(shí)候使用。
//通過(guò)定義一個(gè)數(shù)組看出問(wèn)題 //int arr[10] = { 0 };------正常的定義數(shù)組 //int num = 10; //int arr[num] = { 0 };-----結(jié)果產(chǎn)生報(bào)錯(cuò) //const int num = 10; //int arr[num] = { 0 };----結(jié)果產(chǎn)生報(bào)錯(cuò)
3、#define定義的標(biāo)識(shí)符常量(也叫預(yù)處理)
這是C語(yǔ)言定義數(shù)組大小經(jīng)常用到的方法,大家可以自行使用感覺(jué)一下。
使用格式:#define
<標(biāo)識(shí)符> <常量值/表達(dá)式>
#include <stdio.h> #define MAX 10 int main() { int arr[MAX] = { 0 }; //通過(guò)改變MAX的大小就可以改變數(shù)組大小 printf("%d",MAX); //MAX=10 return 0; }
下面有個(gè)思考題,大家可以思考一下結(jié)果是什么:
#include <stdio.h> #define MAX 5+5 int main() { printf("%d", 3 * MAX); return 0; }
此時(shí)輸出的結(jié)果是20,而并不是30。所以要明白#define MAX 5+5
,MAX
并不等于10。
既然可以把一個(gè)表達(dá)式賦給一個(gè)標(biāo)識(shí)符,那我可以不可以把一些參數(shù)賦值給這個(gè)標(biāo)識(shí)符呢?
大家可以思考一下這段代碼:
#include <stdio.h> #define Add(a,b) a+b int main() { int sum = Add(3,2); printf("%d\n",sum); return 0; }
此時(shí),先發(fā)生sum=a+b
,再發(fā)生sum=3+2
,故輸出5
我們這里只是講解最基礎(chǔ)的常量問(wèn)題,故不多衍生宏定義,后面會(huì)專(zhuān)門(mén)講解宏定義相關(guān)的內(nèi)容。
4、枚舉常量
如果大家學(xué)過(guò)結(jié)構(gòu)體,枚舉的定義與其比較相似。
enum的使用方法:
在定義enum的同時(shí),聲明變量:
enum Day { Mon,Tue,Wed,Thus,Fri,Sat,Sun }Workday;
定義完enum之后再聲明變量:
enum Day { Mon,Tue,Wed,Thus,Fri,Sat,Sun }; enum Day Workday;
定義匿名的枚舉變量:(如果整個(gè)程序只用一個(gè)枚舉,則enum后面不必加標(biāo)識(shí)符,但是不能再定義枚舉結(jié)構(gòu))
enum { Mon,Tue,Wed,Thus,Fri,Sat,Sun }Workday;
通過(guò)一段碼來(lái)為大家剖析枚舉結(jié)構(gòu)的一些細(xì)節(jié):
#include <stdio.h> enum Day { //enum--枚舉類(lèi)型關(guān)鍵字 Day--枚舉類(lèi)型標(biāo)簽 enum Day--枚舉的類(lèi)型 Mon=1, Tue, //{ }里面的為枚舉值 Wed, Thus, Fri, Sat, Sun }Workday; //Workday--枚舉變量
這里做一些說(shuō)明:
- 如果Mon不做賦值,則默認(rèn)為0,后面依次增加,如Tue=1,Wed=2…
- 如果Mon賦值為3,則后面也依次增加,如Tue=4,Wed=5…
- 如果是從中間賦值,如Thus=7,則Thus后面的依次增加,之前的從Mon開(kāi)始則從0
- 開(kāi)始增加
- 枚舉值是常量,不是變量。不能在程序中用賦值語(yǔ)句再對(duì)它賦值。
- 如:Tue=7,Sun=Wed。這些都是錯(cuò)誤的。
- 只能把枚舉值賦給枚舉變量,而不能將該枚舉值的數(shù)值賦給枚舉變量
如:Workday=Tue----正確
Workday=2----錯(cuò)誤
關(guān)于枚舉的更多東西,后面再做分享。希望大家喜歡。
到此這篇關(guān)于C 語(yǔ)言基礎(chǔ)之初識(shí) C 語(yǔ)言常量的文章就介紹到這了,更多相關(guān) C 語(yǔ)言常量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之二叉鏈表創(chuàng)建二叉樹(shù)
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之?二叉鏈表創(chuàng)建二叉樹(shù),下文我們?yōu)榱烁奖愕氖褂枚鏄?shù)結(jié)構(gòu)體,可以使用?typedef?對(duì)結(jié)構(gòu)體進(jìn)行命名,具體內(nèi)容需要的小伙伴可以參考一下2022-02-02OpenCV鼠標(biāo)繪制矩形和截取矩形區(qū)域圖像
這篇文章主要為大家詳細(xì)介紹了OpenCV鼠標(biāo)繪制矩形和截取矩形區(qū)域圖像,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01CLion開(kāi)發(fā)stm32?使用DSP庫(kù)的操作方法
這篇文章主要介紹了CLion開(kāi)發(fā)stm32?使用DSP庫(kù)的方法,首先需要添加DSP庫(kù)文件到工程目錄,修改CMakeLists,添加STM32HAL庫(kù),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09C++左值與右值,右值引用,移動(dòng)語(yǔ)義與完美轉(zhuǎn)發(fā)詳解
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03C++ 將數(shù)據(jù)轉(zhuǎn)為字符串的幾種方法
這篇文章主要介紹了C++ 將數(shù)據(jù)轉(zhuǎn)為字符串的幾種方法,十分的實(shí)用,有需要的小伙伴可以參考下。2015-06-06