書名: 程序設(shè)計(jì)基礎(chǔ)教程:C語言作者名: 常東超 劉培勝 郭來德等編著本章字?jǐn)?shù): 2193字更新時(shí)間: 2020-05-07 11:49:29
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)算。
- VMware View Security Essentials
- Learning C# by Developing Games with Unity 2020
- Offer來了:Java面試核心知識(shí)點(diǎn)精講(原理篇)
- STM32F0實(shí)戰(zhàn):基于HAL庫開發(fā)
- Ext JS 4 Web Application Development Cookbook
- 編程與類型系統(tǒng)
- Mastering Xamarin.Forms(Second Edition)
- FFmpeg開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到短視頻上線
- 深度探索Go語言:對象模型與runtime的原理特性及應(yīng)用
- 零基礎(chǔ)輕松學(xué)C++:青少年趣味編程(全彩版)
- AMP:Building Accelerated Mobile Pages
- 奔跑吧 Linux內(nèi)核
- Docker:容器與容器云(第2版)
- LabVIEW入門與實(shí)戰(zhàn)開發(fā)100例(第4版)
- React and React Native