字元變數型態
1.字元型資料
字元型資料包括字元常數和字元變數。
2.字元常數
字元常數是用單引號括起來的一個字元。
例如:
'a'、'b'、'='、'+'、'?'
都是合法字元常數。
在C語言中,字元常數有以下特點:
1) 字元常數只能用單引號括起來,不能用雙引號或其他括弧。
2) 字元常數只能是單個字元,不能是字串。
3) 字元可以是字元集中任意字元。但數位被定義為字元型之後就不能參與數值運算。如 '5' 和 5 是不同的。'5'是字元常數,不能參與運算。
3.字元變數
字元變數用來存儲字元,即單一字元(如: 'a' )。
字元變數的類型說明符是char。字元變數類型定義的格式和書寫規則都與整型變數相同。
例如:
char a,b;
3.1 字元資料在記憶體中的存儲形式及使用方法
每個字元變數被分配一個位元組的記憶體空間,因此只能存放一個字元。字元值是以ASCII碼的形式存放在變數的記憶體單元之中的。
如x的十進位ASCII碼是120,y的十進位ASCII碼是121。(詳情請參閱ASCII CODE表)
對字元變數 a,b賦予'x'和'y'值:
a='x';
b='y';
實際上是在a,b兩個單元內存放120和121的二進位碼:
a:
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
b:
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
所以也可以把它們看成是整數變數。C語言允許對整數變數賦以字元值,也允許對字元變數賦以整型值。在輸出時,允許把字元變數按整型量輸出,也允許把整型量按字元量輸出。
整型量為二位元組量,字元量為單字節量,當整型量按字元型量處理時,只有低八位元位元組參與處理。
【例】向字元變數賦以整數。
#include<stdio.h> main() { char a,b; a=120; b=121; printf("%c,%c\n",a,b); printf("%d,%d\n",a,b); } |
本程式中定義a,b為字元變數,但在賦值語句中賦以整數值。從結果看,a,b值的輸出形式取決於printf函數格式串中的格式符,當格式符為"%c"時,對應輸出的變數值為字元,當格式符為"%d"時,對應輸出的變數值為整數。
【例】
#include<stdio.h> main() { char a,b; a='a'; b='b'; a=a-32; b=b-32; printf("%c,%c\n%d,%d\n",a,b,a,b); } |
本例中,a,b被說明為字元變數並賦予字元值,C語言允許字元變數參與數值運算,即用字元的ASCII 碼參與運算。由於大小寫字母的ASCII 碼相差32,因此運算後把小寫字母換成大寫字母。然後分別以整數和字元輸出。
3.2 字串常數
字串常數是由一對雙引號括起的字元序列。例如: "CHINA" , “C program” , "$12.5" 等都是合法的字串常數。
字串常數和字元常數是不同的量。它們之間主要有以下區別:
1) 字元常數由單引號括起來,字串常數由雙引號括起來。
2) 字元常數只能是單個字元,字串常數則可以含一個或多個字元。
3) 可以把一個字元常數賦予一個字元變數,但不能把一個字串常數賦予一個字元變數。在C語言中沒有相應的字串變數。這是與BASIC 語言不同的。但是可以用一個字元陣列來存放一個字串常數。在陣列一章內予以介紹。
4) 字元常數占一個位元組的記憶體空間。字串常數占的記憶體位元組數等於字串中位元組數加1。增加的一個位元組中存放字元"\0" (ASCII碼為0)。這是字串結束的標誌。
例如:
字串 "C program" 在記憶體中所占的位元組為:
C |
|
p |
r |
o |
g |
r |
a |
m |
\0 |
字元常數'a'和字串常數"a"雖然都只有一個字元,但在記憶體中的情況是不同的。
'a' 在記憶體中占一個位元組,可表示為:
a |
"a" 在記憶體中占二個位元組,可表示為:
a |
\0 |