1. 程式人生 > >【C語言】常量和變數

【C語言】常量和變數

  計算機高階語言中,資料有兩種表現形式:常量和變數。C語言是計算機高階語言之一,今天我們一起來看看C語言中的常量和變數。
  一、常量
  ⒈定義:在程式執行過程中,其值不能改變的量。比如在生活中,性別、身份證號碼、圓周率……這些都是常量。
  ⒉分類:
  ⑴整型常量:如20,0,-9等均是整型常量。
  ⑵實型常量:如0.34,10.0,12.3e3(代表12.34×10³)等。
  ⑶字元常量:
  ①普通字元,即由單引號括起來的一個字元,如'a','?','4'等。特別注意的是:字元常量在計算機中並不是以字元本身的形式儲存的,而是以其ASCII碼儲存,‘a’的ASCII碼值為97,於是在儲存單元中存放的是97的二進位制程式碼。
  ②轉義字元:以字元\開頭的字元序列。這種字元會將“\”後面的字元轉換成另外的意義,如‘\n’表示“換行”,‘\a’表示“警告”,‘\ddd(三位八進位制數)’的字元值為與該八進位制碼對應的ASCII字元。
  ⑷字串常量:它指雙引號中的所有字元,如“sust”,"china","246"。
  ⑸符號常量:用#define指令,指定用一個符號名稱代表一個常量。如:

#define PAI 3.14//行末沒有分號    

  其中,PAI稱為一個識別符號,為了與變數名相區別,習慣上符號常量用大寫表示。在計算機高階語言中,用來對變數、符號常量名、函式、陣列、型別等命名的有效字元序列統稱為識別符號。在C語言中,規定:識別符號只能由字母、數字和下劃線三種字元組成,且第一個字元不能為數字。
  注意:符號常量不佔記憶體,只是一個臨時符號,在預編譯後這個符號就不在了,所以不能對符號常量賦以新值。
問題思考1:為什麼要使用符號常量?
  ⑹列舉常量:列舉關鍵字為enum。
  宣告列舉型別的一般形式為
  enum[列舉名]{列舉元素列表};
程式碼如下:

#include <stdio.h>
enum Sex//聲明瞭一個列舉型別enum Sex
{
    MALE,
    FEMALE,
    SECRET
};//此處的MALE,FEMALE,SECRET都是列舉常量(列舉元素),不能對列舉元素賦值
int main()
{
    printf("%d\n", MALE);//輸出0
    printf("%d\n", FEMALE);//輸出1
    printf("%d\n", SECRET);//輸出2
    return 0;
}

輸出結果:
這裡寫圖片描述
  也可以不宣告有名字的列舉型別,而直接定義列舉變數,如:

enum{ mon, tue, wed, thu, fri, sat, sun }workday, weekday;

  說明:每一個列舉元素都代表一個整數,C語言編譯器按定義時的順序預設它們的值為0,1,2,3……
問題思考2:列舉有什麼好處?
  二、變數
  ⒈定義:在程式執行過程中,其值可以發生改變的量。如身高,體重,成績,年齡,薪資等。
  ⒉特點:變數必須先定義,後使用
  ⒊命名規則:變數名是識別符號的一種,便要遵循識別符號的命名規則,即只能由字母、數字和下劃線三種字元組成,且第一個字元不能為數字。
  ⒋常變數:用const修飾的變數。如:
  const int a = 10;//a被定義為一個整型變數,其值為10,而且在變數存在期間其值不可改變
  注意:在C語言中,當const 修飾一個識別符號的時候我們說,這個識別符號依然是一個變數,但是它具有常屬性,有型別,佔儲存單元,不能被直接改變。在C++語言中,const修飾的識別符號就是常量。
        在C語言中
  在上面的程式中我定義了一個數組arr2,但此時程式不能通過編譯,編譯器會報錯“arr2未知的大小”。因為此處的sz雖然被const修飾,但它仍為變數,不能放在[]中。
        在C++中
  大家可以看到:在C++中,sz處沒有出現下劃線(提示錯誤),而且程式也可以通過編譯。
問題解答:
  1.為什麼要使用符號常量?
  解答:在對程式進行編譯前,前處理器會先對符號常量進行處理,如在

             #define PAI 3.14

中,把所有的PAI置換為3.14。
  這樣做的好處是:
  ⑴含義清楚,改善程式的可讀性。在定義符號常量名時應考慮“見名知意”。在一個規範的程式中不提倡使用很多的常數,以免導致在檢查程式時搞不清各個常數代表什麼。
  ⑵當需要改變程式中多處使用的同一常量時,可以做到“一改全改”,避免了每一處去修改的麻煩,減少了程式維護的工作量。
  2.列舉有什麼好處?
  解答:列舉的好處:
  ⑴列舉可以使程式碼更易於維護,有助於確保給變數指定合法的、期望的值。
  ⑵列舉使程式碼更清晰,允許用描述性的名稱表示整數值,使人易於理解。
  以上就是這次我分享的所有內容。由於博主水平有限,其中定不乏缺點和不足,熱切期望得到讀者的批評和指正。