官术网_书友最值得收藏!

第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程序。

主站蜘蛛池模板: 兴义市| 开鲁县| 锦屏县| 广水市| 满城县| 冀州市| 大城县| 闵行区| 资源县| 鄂州市| 武冈市| 榕江县| 盈江县| 延安市| 滦南县| 甘南县| 东宁县| 肇东市| 漳平市| 安徽省| 嵊泗县| 安溪县| 盐山县| 凌海市| 乌兰县| 丰都县| 报价| 道孚县| 盐亭县| 明溪县| 洪雅县| 山阴县| 揭阳市| 自治县| 天津市| 弋阳县| 湘乡市| 赤峰市| 克拉玛依市| 博爱县| 栾川县|