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

2.4 字符型常量與變量

2.4.1 字符常量

(1)基本字符常量

字符常量是用單引號括起來的一個(gè)字符。

例如:

'a'、'A'、'='、'+'、'1'

都是合法字符常量,注意'a'和'A'是不同的字符常量。

一個(gè)字符常量占一個(gè)字節(jié)的存儲(chǔ)空間,在相應(yīng)的存儲(chǔ)單元中存放的是該字符的ASCII值,即一個(gè)整數(shù)值,因此在后續(xù)內(nèi)容中將會(huì)看到,字符常量可以像整數(shù)一樣參加數(shù)值運(yùn)算。

例如'a'的ASCII值是97,在內(nèi)存中的存儲(chǔ)形式如下:

所以也可以把它們看成是整型量。C語言允許對整型變量賦以字符值,也允許對字符變量賦以整型值。在輸出時(shí),允許把字符變量按整型量輸出,也允許把整型量按字符量輸出。但由于整型量為2個(gè)字節(jié)或4個(gè)字節(jié),字符量為單字節(jié)量,因此當(dāng)整型量按字符型量處理時(shí),只有數(shù)值的低八位參與處理。

(2)轉(zhuǎn)義字符常量

除了上述形式的字符常量以外,C語言還定義了一些特殊的字符常量是以“\”開頭的字符序列,稱為轉(zhuǎn)義字符,轉(zhuǎn)義字符是一種具有特殊的含義的字符常量,由于改變了字符的原有意義,故稱“轉(zhuǎn)義”,如“\n”中的n不代表字母n,而轉(zhuǎn)義成“換行”符,常用的轉(zhuǎn)義字符如表2.3所示。

表2.3 常用的轉(zhuǎn)義字符及其含義

廣義地講,C語言字符集中的任何一個(gè)字符均可用轉(zhuǎn)義字符來表示。表中的\ddd和\xhh正是為此而提出的。ddd和hh分別為八進(jìn)制和十六進(jìn)制的數(shù)碼。如'\101'表示字母'A','\141'表示字母'a','\134'表示反斜線,'\012'表示換行等。

注意:

①字符常量只能用單引號括起來,不能用雙引號或其他符號。

②字符常量只能是單個(gè)字符,不能是字符串。

③字符可以是字符集中任意字符。但數(shù)字被定義為字符型之后就不能按原數(shù)值參與運(yùn)算了,而是以其ASCII值參與運(yùn)算。如'6'和6 是不同的。'6'是字符常量,而6是整型常量,參與算術(shù)運(yùn)算時(shí)前者數(shù)值是54,后者是原值。

【例2.3】  轉(zhuǎn)義字符的使用。

#include<stdio.h>

void main()

{

 printf("\'A\'的ASCII值是:%d\n",'\101');

 }

 運(yùn)行結(jié)果:

 'A'的ASCII碼值是:65

2.4.2 字符串常量

字符串常量使用英文雙引號限定的字符序列,這個(gè)字符序列包括的字符個(gè)數(shù)稱為字符串的長度,其長度允許為0,每個(gè)字符串在存儲(chǔ)時(shí)都占用一段連續(xù)的存儲(chǔ)單元,每個(gè)字符占用一個(gè)字節(jié),系統(tǒng)自動(dòng)在每個(gè)字符串的尾部附加一個(gè)結(jié)束標(biāo)識(shí)符'\0',因此長度為n個(gè)字符的字符串常量在內(nèi)存中要占用n+1個(gè)字節(jié)的空間,下列都是合法的字符串常量。

"CHINA"

"12345"

"This is a C program!"

" "       /*表示一個(gè)空格符*/

""       /*表示什么字符也沒有*/

"\n"               /*表示一個(gè)轉(zhuǎn)義字符換行*/

"ab"

字符串常量"CHINA"在內(nèi)存中的存儲(chǔ)形式如下:

注意:字符常量'A'與字符串常量"A"在內(nèi)存中的存儲(chǔ)方式的不同。

說明:在C語言中,沒有專門的字符串變量,字符串常量如果要存放在變量中,要用字符數(shù)組來處理。

字符常量與字符串常量的區(qū)別:

①定界符不同。字符常量使用單引號,而字符串常量使用雙引號。

②長度不同。字符常量的長度固定為1,而字符串常量的長度可以為0,也可以是某個(gè)整數(shù)。

③存儲(chǔ)要求不同。字符常量存儲(chǔ)的是字符的ASCII碼值,而字符串常量除了要存儲(chǔ)字符串常量的有效字符外,還要存儲(chǔ)一個(gè)字符串的結(jié)束標(biāo)識(shí)符'\0'。

2.4.3 符號常量

在程序設(shè)計(jì)中,有時(shí)需要多次用到某些常數(shù),或者有些值在程序中特別關(guān)鍵,就可以將這些常量值定義為符號常量,這樣在閱讀和修改程序時(shí)就特別方便,C語言中定義符號常量的方法是在函數(shù)體外專門定義的,也只有在定義之后才能使用。定義符號常量的一般格式如下:

#define 符號常量名 常量

例如:

#define PI 3.14159

該命令定義了符號常量PI,它表示常數(shù)3.14159。

注意:PI是一個(gè)常量,其值是不能改變的。

【例2.4】  符號常量的使用。

#include<stdio.h>

#define PI 3.14159

void main()

{ float r,s,l;

  r=3.6;

  l=2*PI*r;

  s=PI*r*r;

printf("l=%f s=%f\n",l,s);

}

輸出結(jié)果:

l=22.619448  s=40.715004

本例中在main()外部使用命令#define PI 3.14159定義了符號常量PI,它相當(dāng)于常量3.14159,其值在函數(shù)體中不可以被改變。

2.4.4 字符型變量

(1)字符型變量分類

一個(gè)字符型變量只能存儲(chǔ)一個(gè)字符,占用內(nèi)存的一個(gè)字節(jié),在這個(gè)位置存儲(chǔ)的是該字符的ASCII碼值,是一個(gè)8位二進(jìn)制的整數(shù),例如,當(dāng)一個(gè)變量存儲(chǔ)字符'A'時(shí),實(shí)際上是存儲(chǔ)了該字符的ASCII碼值65,由于整數(shù)存在有符號和無符號之分,因此字符型變量分為有符號字符型變量和無符號字符型變量,分別用signed char和unsigned char來說明,通常只用char來說明字符型變量,它相當(dāng)于signed char,即它將轉(zhuǎn)換成有符號的整數(shù),數(shù)值范圍是-128~+127,而unsigned char型變量的數(shù)值范圍是0~255。

(2)字符型變量定義

變量定義的一般形式為:

變量的存儲(chǔ)類別 變量的類型名,變量名的標(biāo)識(shí)符,…;

例如:

char c1,c2;        /*定義兩個(gè)有符號字符型變量*/

unsigned char ch;        /*定義一個(gè)無符號字符型變量*/

(3)字符型數(shù)據(jù)的使用

既然字符型數(shù)據(jù)在內(nèi)存中是以ASCII碼形式存儲(chǔ)的,它的存儲(chǔ)形式與整型數(shù)的存儲(chǔ)形式是類似的,那么,字符型和整型數(shù)據(jù)之間的轉(zhuǎn)換就十分方便,所以字符型和整型在一個(gè)字節(jié)的范圍內(nèi)是通用的,字符型數(shù)據(jù)既能以字符形式輸出,也能以整數(shù)形式輸出。以字符形式輸出時(shí),先將內(nèi)存中的ASCII碼轉(zhuǎn)換成其對應(yīng)的字符,然后輸出。以整數(shù)形式輸出時(shí),則直接將ASCII碼作為整數(shù)輸出。字符數(shù)據(jù)也可直接參與算術(shù)運(yùn)算。

【例2.5】  字符型變量應(yīng)用舉例。

#include<stdio.h>

void main()

{ char c1,c2;

  c1='A';

  c2=c1+32;

  printf("%c,%c\n",c1,c2);

}

輸出結(jié)果:

A,a

【例2.6】  字符型變量與整數(shù)的關(guān)系應(yīng)用舉例。

#include<stdio.h>

void main()

{ char ch1,ch2;

  int i;

  ch1='B';

  ch2=66;

  i=ch1;

  printf("%c,%d\n",ch1,ch1);

  printf("%c,%d\n",ch2,ch2);

  printf("%c,%d\n",i,i);

}

輸出結(jié)果:

 B,66

 B,66

 B,66

通過以上兩個(gè)例子可以看出:

①字符型變量的值可以賦給一個(gè)整型變量。

②整數(shù)值能以字符形式輸出,反之亦然。

③字符型變量可以和整數(shù)混合運(yùn)算。

主站蜘蛛池模板: 沅陵县| 银川市| 苏尼特左旗| 景洪市| 万山特区| 阜南县| 固阳县| 来宾市| 靖宇县| 成武县| 洛浦县| 阿克陶县| 义乌市| 易门县| 吉林市| 亳州市| 南乐县| 高密市| 桂平市| 中方县| 霸州市| 井陉县| 彰化市| 丹凤县| 荣昌县| 宁津县| 荥阳市| 淮北市| 体育| 红安县| 新化县| 赤城县| 犍为县| 余江县| 旅游| 武清区| 乐昌市| 蛟河市| 灵川县| 晋城| 渝中区|