逍遙自在學C語言 | 變數、常量與資料型別

知微之見發表於2023-04-03

前言

一、人物簡介

  • 第一位閃亮登場,有請今後會一直教我們C語言的老師 —— 自在。

  • 第二位上場的是和我們一起學習的小白程式猿 —— 逍遙。

二、基本資料型別

1、整型

C語言中的整型資料如下表所示:

資料型別 含義 長度(位元組) 取值範圍(有符號) 取值範圍(無符號)
short 短整型 2 [ -$2^{15}$ , $2^{15}$-1 ] [ 0 , $2^{16}$-1 ]
int 整型 4 [ -$2^{31}$ , $2^{31}$-1 ] [ 0 , $2^{32}$-1 ]
long 長整型 4或8
long long 長長整型 8 [ -$2^{63}$ , $2^{63}$-1 ] [ 0 , $2^{64}$-1 ]
  • 整型資料可以是有符號的,也可以是無符號的。

  • 有符號的整型可以表示負數和正數,而無符號的整型只能表示非負整數。

2、浮點型

浮點型用於表示實數,它分為單精度浮點型(float)和雙精度浮點型(double)。單精度浮點型佔用4個位元組,雙精度浮點型佔用8個位元組。它們的取值範圍和精度如下表所示:

資料型別 長度(位元組) 取值範圍 精度
float 4 1.2E-38 ~ 3.4E38 約6位小數
double 8 2.2E-308 ~ 1.8E308(15位有效數字) 約15位小數

? 浮點型資料在計算機內部以二進位制形式儲存,因此可能會存在精度問題。在進行浮點型資料的比較時,應該使用適當的誤差範圍進行比較。

3、字元型

字元型用於表示單個字元,它佔用1個位元組。

資料型別 含義 長度(位元組) 取值範圍(有符號) 取值範圍(無符號)
char 字元型 1 [ -$2^7$ , $2^7$-1 ] [ 0 , $2^8$-1 ]

字元型資料可以作為單個字元使用,也可以作為整型資料使用,表示該字元在ASCII碼錶中的對應數值。

4、布林型

布林型(bool)用於表示真假值,它只有兩個取值:true和false。

在C語言中,布林型資料被定義為一個整型資料型別,0表示false,非0表示true。

三、變數


1、變數的定義和宣告

在C語言中,變數必須先被定義或宣告才能使用。定義一個變數意味著為它分配記憶體,宣告一個變數意味著告訴編譯器這個變數的型別和名稱。

  • 變數的定義格式如下:
type variable_name;

其中,type是變數的資料型別,variable_name是變數的名稱。例如:

int apple;
short i = 5;
float voltage;
  • 變數的宣告有兩種情況:

1️⃣一種是需要建立儲存空間的。例如:int apple 在宣告的時候就已經建立了儲存空間。
2️⃣另一種是不需要建立儲存空間的,透過使用extern關鍵字宣告變數名而不定義它。 例如:extern int apple, 其中變數 apple 可以在別的檔案中定義。

extern int apple; //宣告,不是定義
int students; //宣告,也是定義

? 一般來講,除非有extern關鍵字,否則都是變數的定義

2、變數型別

在C語言中,變數的型別指的是變數所儲存的資料型別。我們前面介紹的基本資料型別,都可以作為變數的型別。

  • int:整型,用於儲存整數。
  • long: 長整型,用於儲存更大的整數。
  • float:單精度浮點型,用於儲存浮點數。
  • double:雙精度浮點型,用於儲存更大的浮點數。
  • char:字元型,用於儲存字元。
  • bool:布林型,用於儲存布林值。

C語言還提供了一些複合資料型別,如結構體、聯合體和列舉等,這些符合資料型別,我們在以後的文章中再介紹。

3、變數命名規則

  • 變數名可以由字母、數字和下劃線組成,但必須以字母或下劃線開頭。

  • 變數名不能使用關鍵字作為名稱,變數名的長度沒有限制,但建議使用有意義的名稱。

✔️ 正確的變數命名

int _gCount = 1;
int m_Age = 18;
long time2 = 20;

❌ 錯誤的變數命名

int 1round = 0; //不能以數字開頭

int case = 1; //不能以關鍵字作為變數名

int %age = 16; //不能用標點符號

int name age = 18; //不能用空格

4、變數的初始化和賦值

  • 在C語言中,可以使用賦值運算子(=)將一個值賦給一個變數。

例如,下面的程式碼將值20賦給變數num:

int num;
num = 20;
  • 變數的初始化是指在宣告變數時將其賦初值。

例如,下面的程式碼宣告並初始化了一個名為num的整數變數:

int num = 10;

5、變數作用域

在C語言中,變數的作用域指的是變數在程式中可見的範圍。變數可以在函式內部或外部定義。

  • 在函式內部定義的變數稱為區域性變數,只在該函式中可見。
  #include <stdio.h>
  
  void print_local_num() {
      int local_num = 20;	// 區域性變數
      printf("local_num = %d\n", local_num);
  }
  
  int main()
  {
      print_local_num();  // 輸出 local_num = 20
  	return 0;    
  }
  • 在函式外部定義的變數稱為全域性變數,可以在整個程式中使用。
#include <stdio.h>

int global_num = 10; // 全域性變數

void print_global_num() {
    printf("global_num = %d\n", global_num);
}

int main() {
    print_global_num();  // 輸出 global_num = 10
    return 0;
}

6、變數儲存型別

在C語言中,變數的儲存型別指的是變數所儲存的位置。C語言中的儲存型別包括自動、靜態、暫存器和外部等。

  • 自動變數:自動變數在函式內部宣告,在函式執行時被建立,在函式結束時被銷燬。
  • 靜態變數:靜態變數在函式內部或函式外部宣告,它們在程式開始執行時被建立,在程式結束時被銷燬。
  • 暫存器變數:暫存器變數是指被儲存在CPU暫存器中的變數,它們通常用於在計算密集型的程式碼中提高效能。
  • 外部變數:外部變數是在程式檔案外部宣告的全域性變數,可以被程式的所有檔案訪問。

?自動變數的預設儲存類別為auto。例如,下面的程式碼定義了一個自動變數num:

#include <stdio.h>

void print_num() {
    auto int num = 30;
    printf("num = %d\n", num);
}

int main() {
    print_num();  // 輸出 num = 30
    return 0;
}

?靜態變數預設儲存類別為static,在程式執行期間始終存在,它的值在函式呼叫之間保持不變。例如,下面的程式碼定義了一個靜態變數static_num:

#include <stdio.h>

void print_static_num() {
    static int static_num = 40;
    printf("static_num = %d\n", static_num);
    static_num++;
}

int main() {
    print_static_num();  // 輸出 static_num = 40
    print_static_num();  // 輸出 static_num = 41
    print_static_num();  // 輸出 static_num = 42
    return 0;
}

?暫存器變數的預設儲存類別為register。例如,下面的程式碼定義了一個暫存器變數reg_num:

#include <stdio.h>

void print_reg_num() {
    register int reg_num = 50;
    printf("reg_num = %d\n", reg_num);
}

int main() {
    print_reg_num();  // 輸出 reg_num = 50
    return 0;
}

?外部變數的預設儲存類別為extern。例如,下面的程式碼定義了一個外部變數extern_num,並在另一個檔案中訪問它:

// other_file.c
int extern_num = 60;

// main.c
#include <stdio.h>

extern int extern_num;

void print_extern_num() {
    printf("extern_num = %d\n", extern_num);
}

int main() {
    print_extern_num();  // 輸出 extern_num = 60
    return 0;
}

四、常量

在C語言中,常量可以是整數、浮點數、字元或字串。

1、 整數常量

整數常量是指不帶小數部分的數字。在C語言中,整數常量可以用十六進位制、八進位制或十進位制表示。下表列出了不同進位制下整數常量的表示方法:

進位制 格式 示例
十進位制 直接寫數字 10, 20, 30
八進位制 以0開頭 012, 034, 076
十六進位制 以0x或0X開頭 0x10, 0x1E, 0xFF

例如,下面的程式碼定義了三個整數常量:

#include <stdio.h>

int main() {
    int decimal_num = 10;
    int octal_num = 012;
    int hex_num = 0xFF;
    printf("decimal_num = %d, octal_num = %d, hex_num = %d\n", decimal_num, octal_num, hex_num);
    return 0;
}

輸出結果為:decimal_num = 10, octal_num = 10, hex_num = 255。

2、 浮點數常量

浮點數常量是指帶有小數部分的數字。在C語言中,浮點數常量可以用小數點表示,也可以用科學計數法表示。例如,下面的程式碼定義了兩個浮點數常量:

#include <stdio.h>

int main() {
    float float_num = 1.23;
    double double_num = 1.23e-5;
    printf("float_num = %f, double_num = %f\n", float_num, double_num);
    return 0;
}

輸出結果為:float_num = 1.230000, double_num = 0.000012。

3、 字元常量

字元常量是指用單引號括起來的單個字元。例如,下面的程式碼定義了兩個字元常量:

#include <stdio.h>

int main() {
    char char_a = 'A';
    char char_b = 'B';
    printf("char_a = %c, char_b = %c\n", char_a, char_b);
    return 0;
}

4、 字串常量

字串常量是指用雙引號括起來的多個字元。在C語言中,字串常量實際上是一個字元陣列,以空字元('\0')結尾。例如,下面的程式碼定義了一個字串常量:

#include <stdio.h>

int main() {
    char str[] = "Hello, world!";
    printf("%s\n", str);
    return 0;
}

輸出結果為:Hello, world!。

小結

透過這篇文章,我們已經學會了C語言中基本的資料型別、變數和常量的使用。繼續加油,你會成為C語言大佬的!

相關文章