本節內容主要介紹了C語言程式的常量和變數。介紹了常量和變數的概念以及命名規範,然後講解了它們的一些基本使用方法。 ...
1.常量和變數的概念
程式執行過程中其值不能發生改變的量叫做常量,其值能發生改變的量叫做變數。常量可以直接使用,而變數則必須先定義後才能使用,否則編譯器會報錯。
2.常量和變數的命名規範
在介紹常量和變數的命名規範之前,我們先瞭解一下什麼是標識符和關鍵字。
2.1 標識符
標識符,用來標識符號常量名、變數名、函數名、數組名、文件名、類名、對象名等。簡單的將就是大家取的名字~~有效標識符的構成規則如下:
-
1)第一個字元必須是字母(大小寫都行)或下劃線,不能是數字;
-
2)後跟字母(大小寫都行)、下劃線或數字組成;
-
3)標識符中的大小寫字母有區別。如,變數sum,Sum,SUM代表三個不同的變數;
-
4)不能與編譯系統已經預定義的、具有特殊用途的保留標識符(即關鍵字)同名。比如,不能將標識符命名int,char,float,break,case,for,while,return等等;
下麵列出幾個有效的標識符:
teemo
Garen
move_name
dj8023
_temp
i
the_hero_is_Garen
下麵列出幾個無效的標識符:
8times //第一個字元必須是字母(大小寫都行)或下劃線,不能是數字。
price/tea //後跟字母(大小寫都行)、下劃線或數字組成,/不是屬於之中。
my name //含有空格
x+y //包含了'+'號
int //C語言程式中的關鍵字
2.2 關鍵字
C語言中具有特殊含義的英文單詞,通常用於構成語句,存儲數據,定義數據類型等。下麵列出了C語言中的一些保留字。這些保留字不能作為常量名、變數名或其他標識符名稱。
-
1)基本數據類型
int:聲明整數類型
float:聲明浮點型
double:聲明雙精度浮點型
char:聲明字元類型
void:空類型,聲明函數無返回值或無參數 -
2)流程式控制制
條件判斷:if、else、switch、case、default等
迴圈:while、do、for、break、continue
返回:return
在本節中,先瞭解一下就行,有很多不明白的關鍵字後面會講到。
2.3 命名規範
首先,必須是有效的標識符。在這個基礎上,我們使用的命名最好能做到看名字就明白它表示什麼。如果要使用一個變數來表示teemo的血量,我們可以將其命名為teemo_hp或者teemoHp,而不是隨便的命名為a或者b之類的。遇到兩個或者更多的單片語成的名稱,我們通常用下劃線字元將它們連接起來,或者從第二單詞開始將每一個單詞的第一個字母大寫。
還有一些程式員可能會在變數中加入描述變數類型或者內容的首碼。例如,可以將整型變數teemoHp命名為nTeemoHp,其中n表示整數值。這樣做的好處是在你遇到這個變數的時候,可以很直接的知道這個變數的類型。常用的幾種首碼有:c(表示單個字元)、p(表示指針)等。另外,常量的標識符習慣用大寫字母表示,變數的標識符習慣用小寫字母表示。單下劃線打頭的標識符一般代表標準資料庫的變數,雙下劃線打頭的標識符一般代表編譯器的變數。
關於命名,想說的是,命名可以根據自己的需要、喜好和個人風格來使用,但起碼要保證一個程式裡面的風格是一致性的。在團隊共同開發中,則需要按照規範進行命名。規範的命名不僅可以讓自己以後看的明白,也利於給團隊其他人維護代碼。
3.常量
3.1 直接常量
直接常量又可以叫做字面常量,通過數據來直接表現。在C語言中,編譯器會自動根據字面常量的表示形式確定其類型。例如:
y = x + 3;
在上面的程式中,3將會被編譯器作為int類型的常量。再例如:
y = x + 3.0;
3.0是小數,則會被編譯器作為float類型的常量。當然,字元也有常量,不過和整型常量不同,字元常量必須使用單引號來進行表示。字元常量是使用單引號括起來的一個字元,不能是多個字元。例如,下麵都是合法的字元常量:
'a'、'B'、'#'、'8'
需要強調的是只能是單引號,並且只有一個字元,字元可以是ASCII碼中的任意字元。如果數字被定義成字元常量的話,就不能代表數字字面的量了。如果參與運算,它的值將會是對應的ASCII碼。比如上面的字元常量'8',在ASCII碼對應的值為56。這個時候參與運算,比如加上1,將得到的整數值是57。
3.2 符號常量
在C語言程式中,還可以使用一個符號常量來代替常量。使用符號常量有兩個好處,一個是如果需要修改常量的話,只要修改定義符號常量的語句就行;另一個好處,使得程式中常量的含義更加清楚。定義符號常量有兩種方法:#define巨集定義和const語句定義。在這裡我就先不展開講了,大家過一眼就好了,後面的教程會詳細的講解巨集定義和const的應用。
4.變數
在程式中,我們會使用到各種變數。當我們創建一個變數時,就會在記憶體中開闢一些空間。一般變數先聲明,然後初始化。
4.1 聲明變數
C語言中使用聲明語句,來聲明一個變數,指出存儲類型並提供位置標簽。C語言中,變數要求先聲明後定義,這樣做的好處在於:
-
1.確保後面引用的變數名和聲明的一致,減少了輸入錯誤。如聲明瞭變數teemo,在後面引用時,不小心輸成了timo,編譯器將會報錯,指示timo未聲明。
-
2.在聲明變數時,會指定變數的類型,當進行運算的時候,編譯器就可以檢查運算是否合法。
-
3.編譯器根據指定變數的類型分配記憶體。
聲明變數的一般語法格式:
類型 變數名;
其中,類型是數據類型的關鍵字,比如說int表示整數類型、double表示雙精度浮點類型。變數名則需要符合命名規範的標識符。下麵我們將會通過簡單的程式,來介紹如何聲明變數。比如說:我們要聲明一個變數表示提莫的血量。在C語言中,就可以表示:
int teemoHp;
float teemoAttack;
int 是一種數據類型,表示是整數。
teemoHp 是一個標識符,這裡代表整數類型的血量。
; 表示一個語句結束。
我們從電腦的角度來講,第一條語句指出程式需要一個存儲空間,用這個記憶體來存儲一個整數。那麼在C語言中,寫上這個聲明語句,程式就會將電腦的某一區域記憶體,命名為teemoHp,併在這個記憶體中存放整數類型。teemoHp這個標識符就是一個變數,它代表teemo的血量。這條語句創造了一個變數teemoHp,我們把這個過程叫做變數聲明。
同類型的變數還可以在一個語句中同時聲明多個變數,各變數之間用逗號分隔開,例如:
int teemoHp, garenHp;
上面語句聲明瞭兩個整數類型的變數,等同於:
int teemoHp;
int garenHp;
4.2 變數初始化
在對變數聲明時,編譯器會給變數分配記憶體,但分配的這個記憶體並不會被清空。這個就和你刪除電腦中的文件一樣,雖然你點了刪除這些文件,但實際上這些文件還會存在,只是我們看不到了。只有當你再次存儲文件覆蓋這些文件時,這些文件才算是刪除了。這也是一些刪除的文件,也可以通過某些手段來恢復的重要原因。那麼就可能出現編譯器給我們分配的記憶體,已經有存儲值的情況,而且這個值對我們來說還是不確定的。為了防止程式因為不確定的值而出現不可預料的情況,我們在使用變數的時候就要對其進行賦初值,使得變數的值是確定的,這種方法就是初始化。
下麵再來看一個簡單的實例,我們要把提莫的血量作為一個變數,提莫的血量值是586。在C語言中,就可以表示成:
int teemoHp;
teemoHp = 586;
我們先聲明瞭一個變數teemoHp,然後將常量586保存到變數teemoHp中。第二個語句中,“=”也叫賦值操作符,這個過程叫做賦值。賦值是指數據放到記憶體的過程,我們把這個過程叫做變數的賦值;又因為是第一次賦值,也稱變數的初始化。
在聲明變數的同時可以直接對其進行賦值,上面的兩個語句,又可以直接表示成:
int teemoHp = 586;
如果多個變數具有相同的值,還可以進行連續的賦值。例如:
int teemoHp, garenHp;
teemoHp = garenHp = 586;
但不可以在聲明的時候對其進行連續賦值。像下麵語句一樣:
int teemoHp = garenHp = 586;//報錯
這樣寫會導致標識符garenHp沒有聲明,所以編譯器報錯。
如果要在一個語句中這樣做,我們應該寫成下麵語句:
int teemoHp = 586, garenHp = 586;
我們還可以寫成:
int teemoHp, garenHp = 586;
teemoHp = 586;
我們知道,在實際中,提莫通過等級的提升以及出的裝備,血量的值會不斷變化,那我們應該怎麼辦呢?答案是,血量的值是一個變數,我們可以通過再次賦值改變血量的值,例如:
int teemoHp = 586;
teemoHp = 1000;
teemoHp = 5000;
再次的賦值,會把第一次的數據覆蓋掉。也就是說,teemoHp中最後的值是5000(這怕不是一個肉提莫),這也是因為586、1000已經被覆蓋掉了。
5.總結
總結一下,本節內容主要介紹了C語言程式的常量和變數。介紹了常量和變數的概念以及命名規範,然後講解了它們的一些基本使用方法。
6.練習
4-1 對下麵進行判斷,哪些是合法標識符,哪些又不是合法標識?
su8
_total
Class
Student_name
louts_1_2_3
BASIC
M.D.John
\#123
3D45
a>b
4-2 編寫一個程式,對蓋倫的屬性值,找到合適的類型來定義並且為其賦值。
名字:簡稱為G
生命值:455
移動速度:340
攻擊速度:0.625
攻擊範圍:125
生命回覆:8.25
攻擊力:59.5
可以在評論中,寫下你們的練習答案。
之後的文章會給大家帶來更精彩的內容
歡迎關註我的知乎專欄:程式員基礎知識
獲取練習答案以及更多實戰項目
歡迎關註我的公眾號:程式員基礎知識
交(gao)流(ji)群:493584686