《學會 C 語言》學習筆記(四):變數、常數及資料型態

前言

本文為《學會 C 語言》一書的學習筆記。

概述

電腦程式在執行時,常常需要記住一些資料,所以程式語言會提供一個地方用來記得執行時的一些資料,這個地方就是變數(Variables)。

變數儲存在哪裡

變數儲存在電腦的記憶體裡,變數是一個名稱,用來代表電腦記憶體空間的一個位址。

變數的基本操作

變數只有兩種操作:

  • 存値,指定變數成為一個全新的値。
  • 取値,取得目前的變數値。

常數

常數(Constants)就是固定不變的數値,如 A100,也就是數値或字元値。

資料型態

資料型態決定變數能夠儲存數値或字元等資料。

識別字

程式設計者在程式碼中自行命名的元素,稱為識別字(Identifier),如變數名稱。而保留字(Reserved Words)是一些對編譯器有特殊意義的名稱,程式設計者不得再重新賦予不同的用途。

識別字名稱(Identifier Names)是指 C 語言的變數、函數、標籤或各種自訂資料型態的名稱,可以包含英文字母、數字和底線「_」字元組成的名稱。

變數

變數就是使用有意義的名稱來代表數字的記憶體位址。

宣告變數並指定初値

C 語言提供四種基本資料型態:

  • char,代表字元。
  • int,代表整數。
  • float,代表單精度浮點數。
  • double,代表雙精度浮點數。
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

int main()
{
int grage = 10;
double height = 175.5;
double weight = 75.5;
printf("成績 = %d\n", grage);
printf("身高 = %f\n", height);
printf("體重 = %f\n", weight);

return 0;
}
  • 格式字元「%d」用來輸出整數。
  • 格式字元「%f」用來輸出浮點數。

C 語言除了一行宣告一個變數外,也可以在同一行宣告多個變數,分別指定初値。

1
double height = 175.5, weight = 75.5;

也可以只宣告變數,但不指定初値。

1
2
3
int grage;
double height;
double weight;

指定敘述

指定敘述(Assignment Statements)是在程式執行中更改變數値,在宣告變數時沒有指定初値,可以使用指定敘述來指定或更改。

C 語言的指定敘述是「=」符號,可以更改變數値成為常數値、其他變數或運算結果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main()
{
int score1 = 35;
int score2 = 10;
int score3 = 10;
score2 = 27;
score3 = score2;
printf("第一節 = %d\n" , score1);
printf("第二節 = %d\n" , score2);
printf("第三節 = %d\n" , score3);

return 0;
}
  • 等號左邊的是變數的記憶體空間位址,等號右邊的是變數値。

C 語言支援多重指定敘述(Multiple Assignments),可以在同一指定敘述同時指定多個變數値。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

int main()
{
int score1, score2, score3;

score1 = score2 = score3 = 25;

printf("第一節 = %d\n" , score1);
printf("第二節 = %d\n" , score2);
printf("第三節 = %d\n" , score3);

return 0;
}

常數

在 C 語言,使用 #define 指令和 const 常數修飾子建立常數。

使用前置處理器的 #define 指令來定義常數。

1
#define PI 3.1415926
  • 這是巨集指令,所以沒有等號與分號。

使用 const 常數修飾子來定義常數。

1
const double e = 2.71828182845
  • 如果是使用在陣列,表示陣列的所有元素都不能更改;如果是使用在函數參數,表示函數中不允許更改其參數値。

使用常數是希望程式執行中,無法使用程式碼更改它的値。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#define PI 3.1415926 /* 常數 */

int main()
{
double area;
double r = 10.0;

const double e = 2.71828182845;
area = PI * r * r;

printf("面積: %f\n", area);
printf("常數e = %f\n", e);

return 0;
}

資料型態

C 語言的變數需要指定使用的資料型態,告訴編譯器變數準備儲存哪種資料,以及需要配置多大的記憶體空間。注意,變數在定義以後就不能再更改資料型態。

基本資料型態

以 ANSI-C 編譯器為例,一些基本資料型態如下:

資料型態 說明 位元數 範圍
unsigned int 無符號整數 32 0 ~ 4,294,967,295
signed char 字元 8 -128 ~ 127
signed int 整數 32 -2,147,483,648 ~ 2,147,483,648
float 單精度浮點數 32 1.18e-38 ~ 3.40e+38
double 雙精度浮點數 64 2.23e-308 ~ 1.79e+308

延伸資料型態

從基本資料型態可以建立多種延伸資料型態如下:

資料型態 說明
陣列(Array) 大部分資料型態都可建立陣列
函數(Function) 函數若有傳回値,就會傳回指定資料型態
指標(Pointer) 指向特定資料型態記憶體位址的變數
結構(Structure) 可以組合各種資料型態變數來建立新型態
聯合(Union) 類似結構,在同一塊記憶體空間可以儲存不同資料型態

型態修飾子

C 語言提供四種型態修飾子,如下:

型態修飾子 說明
unsigned 無符號變數,變數値都是正整數
signed 有符號變數,變數値可為正負値
short 比 int 還小的範圍
long 比 int 還大的範圍

在 C 程式可以使用 sizeof 運算子取得指定資料型態占用的位元組數。

1
printf("char = %d\n", sizeof(char));

也可以取得變數占用的位元組數。

1
printf("var1 = %d\n", sizeof(var1));

整數資料型態

整數資料型態(Integer Types)是指變數儲存的値為整數値,沒有小數點。

整數常數(Integer Constants)是在程式碼直接使用數字。

  • 八進位:以「0」為開頭的整數値。
  • 十六進位:以「0x」或「0X」為開頭的數值。
整數常數 十進位値 說明
123 123 十進位整數
-243 -234 十進位負整數
0256 174 八進位整數
0Xff 255 十六進位整數
0xccf 3279 十六進位整數

浮點數資料型態

浮點數資料型態(Floating Types)是指變數儲存的値為加上小數或使用科學符號表示的數值。

浮點常數(Floating Constant)是在程式碼直接使用浮點數値,是擁有小數點的數值。

浮點常數 十進位値 說明
123.23 123.23 浮點數
.0007 .0007 浮點數
5e4 50000 使用指數的浮點數
4.34e-3 0.00434 使用指數的浮點數

字元資料型態

字元資料型態(Character type)是指變數儲存的値為字元。

字元常數(Character Constant)是在程式碼直接使用字元符號,需要使用單引號「'」包圍起來。

可以使用「\x」字串開頭的兩個十六進位數字,或「\」字串開頭的三個八進位數字來表示。

1
2
char c = '\x20';
char d = '\040';

字串常數(String Literals)就是字串,使用 ASCII 碼的雙引號「"」包圍起來。

1
"學習 C 語言"

跳脫字元

C 語言提供跳脫字元來輸入特殊字元,一些使用「\」符號開頭的跳脫字元如下:

跳脫字元 說明
\t Tab 鍵
\r Enter 鍵
' 單引號
" 雙引號
\ 斜線

void 資料型態

void 資料型態在 C 語言是一種特殊資料型態,代表一個並不存在的値,主要使用在型態轉換、函數傳回値、參數列和指標。

參考資料

  • 陳會安(2016)。學會 C 語言。台北市:旗標。