C 語言程式設計教學:變數 (variable) 和資料型別 (data type)

PUBLISHED ON JUN 14, 2018 — PROGRAMMING

程式很大一部分的目的在操作資料,變數和資料型別是最基礎的相關概念。

變數 (Variable)

使用變數是程式中最基本的操作。以下是一個簡例:

#include <stdio.h>

int main(void) {
    // Declare a variable and assign some value.
    char *msg = "Hello World";
    
    // Formatted printing.
    printf("%s\n", msg);
    
    return 0;
}

在我們這個例子中,我但宣告變數 msg 並對其賦值,接著,我們在 printf 函式中呼叫 msg 變數,最後在終端機印出其值。

變數包含以下三個要素:

  • 變數名稱
  • 資料型別

對照我們的例子:

  • 變數名稱:msg
  • 資料型別:char *,為指向 char 的指標 (pointer)
  • 值:"Hello World"

指標是 C (或 C++) 重要的語法特性,但我們這裡暫時不談其細節。

變數名稱

變數名稱可以用以下符號開頭:

  • 小寫英文字母
  • 大寫英文字母
  • 底線 _

之後可以用以下符號:

  • 小寫英文字母
  • 大寫英文字母
  • 底線 _
  • 數字

只要符合規則,任何變數名稱皆可。一開始學習時,通常會用很簡單的符號來命名變數,這倒也無可厚非。但最好將變數以有意義的方式來命名,日後閱讀程式碼時比較能理解其想法。

像以下的程式一開始無上馬上會意其意圖:

n = a * pow((1.0 + r), p);

但我們將變數改一下,馬上就可以知道該程式碼的意圖:

total = principal * pow((1.0 + rate), numOfPeriods);

而迴圈 (loop) 內通常會用 ij 等簡短的變數名稱,因為這類變數只是一個暫時的計數器:

for (size_t i = 0; i < row; i++) {
    for (size_t j = 0; j < col; j++) {
        // Do something here.
    }
}

函式 (function) 內部的變數名稱可以視情形用長變數或短變數,清晰可辨即可:

Stack * stack_new()
{
    Stack *s = malloc(sizeof(Stack));
    if (!s) {
        return s;
    }
    
    s->top = NULL;
    
    return s;
}

在本例中,由上下文可知 sStack *,使用短變數也無妨。

一般來說,變數命名有兩種風格:

  • camelCase
  • snake_case

任一風格皆可,筆者仿 Java 社群的習慣,採用 camelCase (小駝峰) 來命名變數。至於 CamelCase (大駝峰) 僅用於定義新的結構 (struct),這是因為我們可以將結構視為類似於類別 (class) 的實體,後文會再說明。

保留字 (Keywords)

保留字是指在語言中有特殊意義,無法做為變數的字詞。C 語言有以下 32 個保留字:

auto	break	ca