第2篇 基礎篇
第3章 基本數(shù)據(jù)類型
C語言要處理的對象是數(shù)據(jù),其中整數(shù)、實數(shù)、字符是要處理的的最基本的數(shù)據(jù),而其他類型的數(shù)據(jù)都是由這些基本數(shù)據(jù)組合而成的。本章主要講解C語言中的基本數(shù)據(jù)類型:整型、實型和字符型。
3.1 數(shù)據(jù)類型的定義及分類
一個人的年齡需要使用整數(shù)表示,如張三的年齡是27歲。一個學生的平均成績需要使用帶小數(shù)的數(shù)據(jù)表示,如周杰的各門功課的平均成績是87.5。一個人的性別需要使用字符表示,如劉艷的性別是女。這些數(shù)據(jù)分別對應于C語言中的整型、浮點型(也稱實型)和字符型。
C語言中的數(shù)據(jù)類型劃分如圖3.1所示。
1.基本類型
基本類型是指該類型不可再分。基本類型包括整型、浮點型、字符型和枚舉類型。本章主要講解整型、浮點型、字符型,枚舉型將在后面的章節(jié)講到。

圖3.1 數(shù)據(jù)類型的分類示意圖
1)整型數(shù)據(jù)
在C語言中,整型數(shù)據(jù)可以用十進制、八進制和十六進制表示。其中,八進制整數(shù)以0開頭,十六進制整數(shù)以0x開頭。整型數(shù)據(jù)的幾種進制表示如表3.1所示。
表3.1 整型數(shù)據(jù)的幾種進制表示

2)浮點型數(shù)據(jù)
浮點型數(shù)據(jù)有兩種表示方法:十進制小數(shù)表示法和指數(shù)表示法。例如,123.89、-2.37、71.24都是十進制小數(shù)表示法,3.65e6、6.78E-6、7.92e-12都是指數(shù)表示法。需要注意的是,在十進制小數(shù)表示法中,小數(shù)點前面如果只有0,則可以省略0。例如,0.123可以寫作.123。在指數(shù)表示法中,e或E前面必須有數(shù)字且后面的數(shù)必須是整數(shù)。例如,e5、1.2e2.3、e2.5都是錯誤的表示形式。
3)字符型數(shù)據(jù)
字符型數(shù)據(jù)是使用一對單引號括起來的一個字符。例如,'A'、'X'、'x'、'a'、'b'、't'都是字符型數(shù)據(jù)。這里的單引號只是為了表明該數(shù)據(jù)是字符型數(shù)據(jù)。注意,'X'和'x'是兩個不同的字符。
在C語言中,還有一種特殊的字符──轉義字符。轉義字符是以反斜杠'\'開頭的字符,如第2章中的最簡單程序中的'\n'就是轉義字符,表示換行。C語言中常見的轉義字符如表3.2所示。
表3.2 常見的轉義字符

例如,'\101'表示十進制數(shù)65對應的字符'A','\0x41'表示十進制數(shù)65對應的字符'A'。
4)字符串型數(shù)據(jù)
字符串型數(shù)據(jù)是由多個字符構成的數(shù)據(jù)類型。字符串是由一對雙引號括起來的字符序列。例如,"hello word"、"thankyou"、"bye"、"nwu"、"tsinghua"都是字符串類型的數(shù)據(jù)。需要注意的是,字符串數(shù)據(jù)中不允許出現(xiàn)雙引號(”)和反斜杠(\)。
2.構造類型
構造類型是由基本數(shù)據(jù)類型組合而成的。構造類型的每一個成員是一個基本數(shù)據(jù)類型或其他數(shù)據(jù)類型。構造類型包括數(shù)組類型、結構體類型和聯(lián)合體類型。其中,數(shù)組類型可以看成是由若干個變量構成的類型,結構體類型和聯(lián)合體類型都屬于用戶自定義的類型,用來表示一些復雜的數(shù)據(jù),如教職工情況表中的元素、學生成績表中的元素。
3.指針類型
指針類型是一種特殊的類型,它表示某個數(shù)據(jù)的地址。指針類型是C語言的靈魂,它是區(qū)別于其他語言的重要特性。通過指針可以很方便地訪問內存中的數(shù)據(jù),可以大大提高程序的執(zhí)行效率并使C語言的使用變得更加靈活。
4.空類型
空類型是指數(shù)據(jù)沒有類型,多應用在類型的轉換場合,通常是指針類型的轉換。
3.2 變量與常量
為了程序設計的需要,需要引入變量和常量。在程序設計過程中,需要將經常變化的數(shù)存放在變量中,將不變化的數(shù)存放在常量中。變量和常量都是一種容器,它們是存放數(shù)據(jù)的容器。本節(jié)主要講解變量與常量。
3.2.1 變量
變量是指其值可以改變的量。變量是用來存放數(shù)據(jù)的內存單元,變量相當于存放物品的容器,數(shù)據(jù)相當于物品。例如,一個紙盒子里面可以存放鞋子,也可以存放書或其他東西。這個紙盒子就相當于C語言中的變量,鞋子、書則相當于C語言中的數(shù)據(jù)。一般情況下,一個變量只能存放一個數(shù)據(jù)。
1.什么是變量
變量是內存儲器中的一個存儲單元,用來存放數(shù)據(jù)。一個變量有一個名字,稱之為變量名,存放在變量中的數(shù)據(jù)則叫做變量值。變量的示意圖如圖3.2所示。

圖3.2 變量的示意圖
在圖3.2中,a是變量名,a中存放了一個數(shù)據(jù)8,8就是變量值。
2.變量名是一種標識符
變量名就是變量的名字,它是一種標識符。后面將要學到的常量名、數(shù)組名、函數(shù)名、類型名、文件名也是標識符。C語言規(guī)定標識符只能由字母、數(shù)字、下劃線構成,其中第一個字符必須是字母或下劃線。例如,下面是一些合法的變量名,也是標識符:
abc,_abc,a_b2,x2,xyz,a,b,hello,name,num,count,year,month,day
下面是一些非法的變量名,也是非法的標識符:
3abc,a-b,a+b,M.D.,a#b,a<b
注意
在C語言中,大寫字母和小寫字母被認為是兩個不同的字符。例如,Student、student、STUDENT是不同的變量名。一般情況下,變量名用小寫字母表示。
3.關鍵字是一種特殊的標識符
關鍵字是一種特殊的標識符,而變量名是用戶定義的標識符。因此,關鍵字不能用來作為變量名。C語言中的關鍵字有32個,如表3.3所示。
表3.3 C語言中的關鍵字

表中,int、char、float用來說明變量的類型,分別表示整型、字符型和浮點型。
4.定義變量
在C語言中,必須先定義變量,然后才能使用變量。變量的定義形式如下所示。
類型說明符 變量名;
類型說明符是指int、char和float等關鍵字;變量名由用戶自己定義,必須符合標識符的定義。例如,下面是一些合法的變量定義:
01 int a; /*a被定義為整型變量*/ 02 char b; /*b被定義為字符型變量*/ 03 float average; /*average被定義為浮點型變量*/
經過以上變量定義之后,在編譯階段這些變量將會被分配相應的存儲單元,由此便可以用來存放相應的數(shù)據(jù)了。
3.2.2 常量
在程序運行過程中,其值不發(fā)生改變的量叫做常量。在C語言中,常量主要有整型常量、浮點型常量、字符常量、字符串常量。常量與變量一樣,在使用之前也需要先進行定義。它的定義方式有兩種:使用#define定義常量和使用const定義常量。
(1)使用#define定義常量。使用#define定義常量的形式如下:
#define 常量名 常量值
#define、常量名、常量值之間需要使用空格分隔開。常量名也是標識符,一般用大寫表示。例如,一個名字為N的常量定義如下:
#define N 20 /*N是常量名,N的值為20*/
在定義常量時,必須為常量指定一個固定的值,該值在程序運行過程中不可以改變。
(2)使用const定義常量。使用const定義常量的形式如下:
const 類型說明符 常量名=常量值
其中,類型說明符是指int、char、float等,常量名與常量值用等號“=”連接。這里的“=”在C語言中被稱為賦值符號,即將常量值存放在常量名標識的內存單元中。例如,一個名字為PI的常量定義如下:
const float PI=3.1415926; /*將PI定義為浮點型常量,其值為3.1415926*/
使用#define和使用const定義常量的效果相同。在程序運行過程中,常量的值都不可以改變。需要注意的是,使用#define定義常量時后面不需要使用分號,而使用const定義常量時后面需要使用分號。
下面具體介紹C語言中的各種類型常量。
1.整型常量
定義整型常量可以使用#define和const兩種方法。例如,定義一個八進制整型常量M的代碼如下:
01 #define M 032 02 const int M=032;
以上兩行代碼的作用是等價的,即M被定義為常量且其值為八進制整數(shù)032。如果定義一個十進制整型常量D,代碼如下:
#define D 50
D為整型常量符號,其值為50。以上代碼與下面的代碼等價:
const int D=50;
2.浮點型常量
浮點型常量的定義方法與整型常量的定義方法類似。例如,使用const定義一個圓周率PI,代碼如下:
const float PI=3.1415926;
以上代碼與下面的符號定義形式等價:
#define PI 3.1415926
3.字符型常量
使用const定義字符型常量需要使用關鍵字char。例如,定義一個字符型常量CHAR的代碼如下:
const char CHAR='X';
它與以下代碼等價:
#define CHAR 'X' CHAR就代表了字符'X'。
注意
使用const定義常量時,需要使用類型說明符int、float、char等說明常量的類型;使用#define定義常量時,則不需要說明常量的類型。
3.3 整型變量
整型變量只能存放整型數(shù)據(jù),但是存放在整型變量中的數(shù)據(jù)可以改變。整型變量有以下幾種類型。
(1)基本整型變量。基本整型變量對應于C語言中的關鍵字int。
(2)短整型變量。短整型變量對應于C語言中的關鍵字short int。
(3)長整型變量。長整型變量對應于C語言中的關鍵字long int。
本節(jié)主要講解這3種整型變量的定義、表示范圍、存儲形式、變量的賦值。
3.3.1 整型變量的定義
C語言中的整型變量根據(jù)數(shù)據(jù)的表示范圍可以分為基本整型變量、短整型變量和長整型變量,分別用int、short int、long int表示。整型變量的定義形式根據(jù)是否帶符號分為帶符號整型變量的定義與無符號整型變量的定義。
1.帶符號整型變量的定義
帶符號整型變量的定義格式如下:
整型類型說明符 變量名列表;
整型類型說明符是指int、short int、long int。變量名列表可以是一個變量名或多個變量名。如果是多個變量名,需要使用逗號分隔開。例如,
01 int a; /*a為基本整型變量*/ 02 short int b; /*b為短整型變量*/ 03 long int c; /*c為長整型變量*/ 04 int x,y,z; /*x、y、z被定義為基本整型變量,使用逗號分隔開*/
其中,短整型變量定義中的short int可以省略int,長整型變量定義中的long int可以省略int。因此,上面代碼的第2行和第3行與以下代碼等價:
02 short b; /*b為短整型變量,省略了int*/ 03 long c; /*c為長整型變量,省略了int*/
以上定義的整型變量都屬于有符號整型,即變量有正負之分。
2.無符號整型變量的定義──使用unsigned
在C語言中,還可以定義無符號整型變量,這種變量中的數(shù)據(jù)都是正數(shù)。它的定義格式是在1.的定義格式前面增加一個修飾符unsigned,格式如下:
unsigned 整型類型說明符 變量名列表;
例如,一些無符號整型變量的定義代碼如下:
01 unsigned int x; /*x為無符號基本整型變量*/ 02 unsigned short int m; /*m為無符號短整型變量*/ 03 unsigned long int m1,m2; /*m1和m2為無符號長整型變量*/ 04 unsigned int a,b,c,d; /*a、b、c、d為無符號基本整型變量*/
上面的代碼中的int都可以省略,省略int后的代碼如下:
01 unsigned x; /*x為無符號基本整型變量,省略了int*/ 02 unsigned int m; /*m為無符號短整型變量,省略了int*/ 03 unsigned int m1,m2; /*m1和m2為無符號長整型變量,省略了int*/ 04 unsigned a,b,c,d; /*a、b、c、d為無符號基本整型變量,省略了int*/
以上兩段代碼是等價的。
3.3.2 整型變量占用的字節(jié)數(shù)與表示范圍
在C語言中,數(shù)據(jù)類型不同,該數(shù)據(jù)占用的字節(jié)數(shù)就不同,表示范圍也不同。同一類型的數(shù)據(jù)在不同的編譯器中占用的字節(jié)數(shù)也不同。例如,基本整型變量在Turbo C 3.0開發(fā)環(huán)境中占用2個字節(jié),而在Visual C++ 6.0開發(fā)環(huán)境中占用4個字節(jié)。各種整型變量在不同的編譯器中占用的字節(jié)數(shù)如表3.4所示。
表3.4 不同的整型變量在Turbo C 3.0和Visual C++ 6.0開發(fā)環(huán)境中占用的字節(jié)數(shù)和表示范圍

說明
2個字節(jié)即16個二進制位,對于帶符號整數(shù),它的取值范圍是-215~215-1,即-32 768~32 767;對于無符號數(shù),它的取值范圍是0~216-1,即0~65 535。4個字節(jié)也就是32個二進制位,對于帶符號數(shù),它的取值范圍是-231~231-1,即-2 147 483 648~2 147 483 647;對于無符號整數(shù),它的取值范圍是0~232-1,即0~4 294 967 295。
3.3.3 整型變量的存儲形式
無論什么樣的類型數(shù)據(jù),在計算機中都以二進制形式存儲,整型數(shù)據(jù)也不例外。十進制整型數(shù)據(jù)65在內存中的存放情況如圖3.3所示。

圖3.3 十進制數(shù)65在內存中的存儲示意圖
實際上,所有數(shù)據(jù)是以補碼的形式存放的。正數(shù)的補碼與原碼相同,負數(shù)的補碼是把原碼的除符號位外的其他位取反,并在最低位加1。例如,-65在內存中的存放形式如圖3.4所示。

圖3.4 十進制數(shù)-65在內存中的存儲示意圖
注意
因為整型變量有相應的取值范圍,所以它們存放的整數(shù)不能超出該變量的取值范圍。如果要保存的數(shù)超過了該變量的取值范圍,那么高位部分將會被舍棄。例如,在Turbo C 3.0開發(fā)環(huán)境中,如果將一個整數(shù)65 536存放在int型變量x中,它在內存中的存放形式如圖3.5所示。

圖3.5 整數(shù)65 536在int型變量x中的存儲示意圖
因為int型變量只占用2個字節(jié),所以高位的1被舍棄,則它的二進制數(shù)是16個0,對應于十進制數(shù)0。
3.3.4 整型變量的賦值
在定義了整型變量后,需要使用賦值運算符(即“=”)將數(shù)據(jù)存放到變量中。賦值操作的一般形式如下:
變量名=整型數(shù)據(jù);
它表示將“=”右端的整型數(shù)據(jù)存放在左端的變量名指示的內存單元中。例如,定義了一個整型變量a并賦值,代碼如下:
01 int a; /*定義整型變量a*/ 02 a=29; /*將29賦值給變量a*/
注意
“=”不是等號,而是賦值運算符,它表示將右端的值賦值給左端的變量。
在為變量賦值時,不能超出該變量所表示的范圍,否則會產生錯誤的結果。例如,short int類型的變量的取值范圍是-32 768~32 767,以下賦值是錯誤的:
01 short int b; /*定義短整型變量b*/ 02 b=237 623; /*錯誤!超過了b的取值范圍,實際上b的值是-24 521*/
3.3.5 一個簡單的C程序──輸出整型變量的值
前面已經講解了整型變量的定義與賦值,下面來看一個簡單的C程序。

圖3.6 程序運行結果示意圖
【例3-1】輸出整型變量a的值。
01 #include<stdio.h> /*包含頭文件*/ 02 void main() /*主函數(shù)名,必須有*/ 03 { 04 int a; /*定義整型變量a*/ 05 a=20; /*將20賦值給變量a*/ 06 printf("%d\n",a); /*輸出整型變量a的值*/ 07 }
程序運行結果如圖3.6所示。
這是一個非常簡單的C程序。一個C程序必須包含主函數(shù)main,即代碼的第2行中是必需的,在main之后需要跟一對圓括號。main函數(shù)是程序開始執(zhí)行的地方,前面的void表示函數(shù)沒有返回值,在該程序中void可以省略。
函數(shù)內部使用一對花括號括起來,這稱為函數(shù)體。任何一個函數(shù)體(包括主函數(shù))都由兩個部分組成:聲明部分和執(zhí)行部分。聲明部分是在程序的編譯階段完成的,執(zhí)行部分是在程序的執(zhí)行階段完成的。
(1)聲明部分。聲明部分主要是指變量和常量的定義。例如,上面代碼的第4行就是聲明部分。
(2)執(zhí)行部分。執(zhí)行部分主要由除了變量和常量定義之外的語句構成。它是程序的實際起作用的部分。例如,上面的程序的第5~6行都是執(zhí)行部分。
該程序的第6行是一個輸出函數(shù)。它的主要作用是輸出變量a的值。這個函數(shù)分為兩個部分:前一部分是控制輸出的形式,需要使用雙引號括起來;后一部分是要輸出的變量值。雙引號中的“%d”表示要將變量a以十進制形式輸出。“\n”是一個轉義字符,表示換行。當輸出變量a的值后,應將光標移動到下一行的開始位置,使下一個數(shù)據(jù)在新的光標位置輸出。
使用系統(tǒng)提供的函數(shù)printf時,需要在程序的開始添加命令# include<stdio.h>。它是一個宏命令,表示該函數(shù)包含在文件stdio.h中。
3.4 實型變量
實型變量只能存放實型(浮點型)數(shù)據(jù)。實型變量有以下3種類型。
(1)單精度浮點型變量。單精度浮點型變量使用關鍵字float表示。
(2)雙精度浮點型變量。雙精度浮點型變量使用關鍵字double表示。
(3)長雙精度浮點型變量。長雙精度浮點型變量使用關鍵字long double表示。
本節(jié)主要講解這3種實型變量的的定義與賦值、表示范圍、存儲形式。
3.4.1 實型變量的定義與賦值
實型變量的定義的一般形式如下:
實型類型說明符 變量名列表;
實型變量說明符可以是float、double和long double。變量名列表可以是一個變量名,也可以是多個變量名。如果是多個變量名,應使用逗號分隔開。例如,實型變量的定義如下:
01 float f1,f2; /*f1和f2為單精度浮點型變量*/ 02 double average; /*average為雙精度浮點型變量*/ 03 long double f; /*f為長雙精度浮點型變量*/
與整型變量的賦值一樣,可使用賦值運算符“=”將右端的浮點數(shù)存放到左端的變量中。既可以將十進制小數(shù)賦值給變量,也可以將指數(shù)形式的浮點數(shù)賦值給變量。例如,實型變量的賦值操作代碼如下:
f1=2.35; f2=158.2; f=6.28e5;
在為浮點型變量賦值時,也不可以超過浮點型變量的取值范圍,否則也會出現(xiàn)錯誤的結果。
3.4.2 實型變量的表示范圍
各種實型變量在Turbo C 3.0和Visual C++ 6.0開發(fā)環(huán)境中占用的字節(jié)數(shù)和表示范圍相同。各種實型變量占用的字節(jié)數(shù)和表示范圍如表3.5所示。
表3.5 各種實型變量占用的字節(jié)數(shù)和表示范圍

其中,有效位數(shù)是指浮點數(shù)最多能精確到小數(shù)點后幾位。從表3.5可以看出,從float到double再到long double,它們占用的字節(jié)數(shù)依次增加,表示范圍越來越大,有效位數(shù)越來越多。表示范圍說明了變量的取值范圍,有效位反映了它們表示的變量的精度。
3.4.3 一個簡單的C程序──輸出實型變量的值
【例3-2】一個簡單的輸出實型變量的值的程序,如下所示。
01 #include<stdio.h> /*包含頭文件*/ 02 void main() 03 { 04 float f1; /*定義浮點變量f1*/ 05 f1=2.345; /*為f1賦值*/ 06 printf("%f\n",f1); /*輸出變量f1的值*/ 07 }
程序運行結果如圖3.7所示。
(1)該程序與例3-1中代碼的第1~3行和第7行都是相同的。

圖3.7 輸出實型變量的值的程序運行結果示意圖
(2)第4行是浮點型變量的定義。
(3)第5行是為浮點型變量f1賦值。
(4)第6行是利用函數(shù)printf輸出變量f1的值。這里的函數(shù)printf與例3-1中的函數(shù)printf有兩處不同:%f和f1。其中,%f表示輸出的是浮點型數(shù)據(jù),f1是變量名。從運行結果可以看出,在默認情況下,輸出的浮點數(shù)帶有6個小數(shù)位。
3.5 字符型變量
字符型變量一般用來存放字符類的數(shù)據(jù),且只能存放一個字符。本節(jié)主要講解的內容包括字符型變量的定義與賦值、字符變量的存儲形式、字符串數(shù)據(jù)。
3.5.1 字符型變量的定義與賦值
字符型變量的定義格式如下:
char 字符變量列表;
字符變量的類型只有一種,使用關鍵字char表示。例如,定義2個字符的代碼如下:
char c1,c2;
c1和c2都被定義為字符類型。它們可以各存放一個字符。接下來就可以為字符賦值了,代碼如下:
01 c1='A'; 02 c2='B'
需要注意,字符型數(shù)據(jù)需要使用一對單引號括起來。在所有的編譯器中,一個字符型變量占用一個字節(jié)。
3.5.2 字符型數(shù)據(jù)的存儲形式
字符型數(shù)據(jù)在內存中也是以二進制形式存放的。實際上,每一個字符都有唯一的一個ASCII碼與之對應,ASCII碼就是一個整數(shù)。整數(shù)當然是以二進制形式存放的,因此,字符型數(shù)據(jù)也是以二進制形式存放的。例如,字符'A'的ASCII碼是65,字符'B'的ASCII碼是66,字符'a'的ASCII碼是97,字符'b'的ASCII碼是98。字符與ASCII碼之間的對應關系可以通過字符與ASCII碼對照表查到。
字符'A'在內存中的存儲形式如圖3.8所示。
在C語言中,字符型數(shù)據(jù)與整型數(shù)據(jù)是通用的。可以將一個整型數(shù)據(jù)賦值給字符型變量,也可以將一個字符型數(shù)據(jù)賦值給整型變量。一個字符型數(shù)據(jù)可以整數(shù)形式輸出,一個整型數(shù)據(jù)也可以字符形式輸出。

圖3.8 字符'A'在內存中的存儲示意圖
1.以字符形式和整數(shù)形式輸出字符型變量的值
【例3-3】輸出字符型變量中的值。
01 #include<stdio.h> /*包含頭文件*/ 02 void main() 03 { 04 char c1,c2; /*定義兩個字符型變量c1和c2*/ 05 c1='a'; /*為c1賦值*/ 06 c2='b'; /*為c2賦值*/ 07 printf("%c,%c\n",c1,c2); /*以字符形式輸出c1和c2的值*/ 08 printf("%d,%d\n",c1,c2); /*以整數(shù)形式輸出c1和c2的值*/ 09 }
程序運行結果如圖3.9所示。

圖3.9 輸出字符型變量的值的程序運行結果示意圖
(1)第7行是以字符形式輸出c1和c2的值。兩個%c表示以字符形式分別輸出c1和c2的值,雙引號中的逗號按照原樣輸出。
(2)第8行是以整數(shù)形式輸出c1和c2的值。這種以整數(shù)形式的輸出方式實際上輸出的是c1和c2的ASCII碼。
2.以整數(shù)形式和字符形式輸出整型變量的值
【例3-4】輸出整型變量中的值。
01 #include<stdio.h> /*包含頭文件*/ 02 void main() 03 { 04 int x,y; /*定義變量x和y*/ 05 x=97; /*為變量x賦值*/ 06 y=98; /*為變量y賦值*/ 07 printf("%d,%d\n",x,y); /*以整數(shù)形式輸出x和y的值*/ 08 printf("%c,%c\n",x,y); /*以字符形式輸出x和y的值*/ 09 }
程序運行結果如圖3.10所示。
(1)第7行是以整數(shù)形式輸出x和y的值,即輸出97和98。
(2行是以字符形式輸出x和y的值。因為97和98分別是字符'A'和'B'的ASCII碼,所以以%c的形式輸出時,會輸出'A'和'B'。
從以上兩個例子可以看出,字符數(shù)據(jù)和字符數(shù)據(jù)在C語言中是通用的,但是整數(shù)數(shù)據(jù)和字符數(shù)據(jù)在內存中占用的字節(jié)并不相同。如果將一個字符型數(shù)據(jù)賦值給整型變量,就是將該字符的ASCII碼存放在整型變量的低位字節(jié)中。例如,將字符'A'賦值給整型變量a,代碼如下:

圖3.10 以整數(shù)形式和字符形式輸出整型變量的值示意圖
01 int a; /*定義整型變量a*/ 02 a='A'; /*將字符'A'賦值給a*/
字符'A'在變量a中的存儲形式如圖3.11所示。

圖3.11 字符'A'在變量a中的存儲示意圖
在將整型數(shù)據(jù)以字符形式輸出時,只取低位字節(jié)的數(shù)據(jù)作為ASCII碼輸出。相反,如果將一個整型數(shù)據(jù)存放在字符變量中,如果整型數(shù)據(jù)超出字符變量的取值范圍,則高位部分將被舍棄。
3.5.3 字符數(shù)據(jù)與字符串數(shù)據(jù)的區(qū)別
字符串可以看成是由多個字符構成的數(shù)據(jù)。字符數(shù)據(jù)與字符串數(shù)據(jù)的主要區(qū)別體現(xiàn)在以下幾個方面。
(1)字符使用單引號括起來,字符串使用雙引號括起來。例如,'A'、'a'是字符數(shù)據(jù),"electrical"和"pbulish"是字符串數(shù)據(jù)。
(2)字符數(shù)據(jù)只有一個字符,字符串數(shù)據(jù)可以包括零個、一個或多個字符。例如,'B'、'c'是正確的,而"是錯誤的,即單引號內不能沒有字符。'a'和'A'是字符數(shù)據(jù),"a"和"A"是字符串數(shù)據(jù)。
(3)可以將一個字符數(shù)據(jù)賦值給字符變量,但不可以將一個字符串數(shù)據(jù)賦值給字符變量。例如,如果定義了字符變量,則代碼如下:
01 char c; /*定義一個字符型變量*/ 02 c='X'; /*正確!將字符'X'賦值給變量c*/ 03 c="a" /*錯誤!不能將字符串"a"賦值給變量c*/ 04 c="pku"; /*錯誤!不能敬愛那個字符串數(shù)據(jù)"pku"賦值給變量c*/
(4)在C語言中,字符串的末尾都自動被添加一個'\0'作為字符串的結束標志。例如,字符串數(shù)據(jù)"northwest"的存儲形式如圖3.12所示。

圖3.12 字符串"northwest"的存儲示意圖
字符串"northwest"在內存中實際占有了10個字節(jié),而不是9個字節(jié)。但在輸出該字符串時,并不輸出最后的'\0',它僅僅是一個字符串結束的標志。
注意
在C語言中,并沒有專門的字符串變量,字符串的存儲與操作將在數(shù)組部分和指針部分具體進行講解。
3.6 小結
本章主要講解了C語言中的幾種基本數(shù)據(jù)類型──整型、實型和字符型。本章首先介紹了C語言中數(shù)據(jù)類型的分類,然后介紹了變量和常量。變量就是可以改變的量,主要用來存放經常發(fā)生變化的數(shù)據(jù)。常量就是在程序運行期間不能改變的量,主要存放不變的數(shù)據(jù)。本章接著分別講解了整型變量、實型變量和字符型變量的定義、占用字節(jié)數(shù)和表示范圍、存儲形式,并分別通過一個簡單的實例講解了變量的用法。本章的重點是變量的定義和輸出。通過本章的學習,希望大家能夠學會編寫最簡單的C程序。
- Cocos2D-X權威指南(第2版)
- 零基礎PHP學習筆記
- Ceph Cookbook
- R語言數(shù)據(jù)可視化實戰(zhàn)
- The React Workshop
- Swift 3 New Features
- Full-Stack Vue.js 2 and Laravel 5
- Windows Presentation Foundation Development Cookbook
- 精通網(wǎng)絡視頻核心開發(fā)技術
- TypeScript項目開發(fā)實戰(zhàn)
- NoSQL數(shù)據(jù)庫原理
- Mastering Business Intelligence with MicroStrategy
- 實戰(zhàn)Java高并發(fā)程序設計(第2版)
- 小程序從0到1:微信全棧工程師一本通
- 從零開始構建深度前饋神經網(wǎng)絡:Python+TensorFlow 2.x