石家莊哪有個(gè)人建站的網(wǎng)頁設(shè)計(jì)素材網(wǎng)站
基本數(shù)據(jù)類型可以作為變量與常量使用,顧名思義,變量運(yùn)行時(shí)可以改變其值,常量運(yùn)行時(shí)不會(huì)改變其值。
常量分為整型常量、浮點(diǎn)型常量、字符常量、字符串常量和符號常量。
通常用#define來定義一個(gè)標(biāo)識符來表示一個(gè)常量
用type name = 常量來定義一個(gè)變量, 變量可以理解成一個(gè)容器,可以乘裝不同的常量,也可以理解成計(jì)算機(jī)為name這個(gè)標(biāo)識符開辟的一個(gè)個(gè)以字節(jié)為單位的小格子,小格子的數(shù)量就是變量類型type所占據(jù)的存儲(chǔ)空間。每個(gè)小格子里的內(nèi)容依次是當(dāng)前所裝載的常量數(shù)據(jù)的字節(jié)流
1 整型常量與變量
1)十進(jìn)制整數(shù)
如自然數(shù):
#define CONSTANT_MAX_BUF_LEN_DEC 128
int maxBufLenDec = CONSTANT_MAX_BUF_LEN_DEC;
其中,CONSTANT_MAX_BUF_LEN_DEC為整型常量十進(jìn)制整數(shù)128,maxBufLenDec為變量
2)八進(jìn)制整數(shù)
八進(jìn)制的數(shù)表示為前面帶“0”的數(shù)。如
#define CONSTANT_MAX_BUF_LEN_OCT O200
int maxBufLenOct = CONSTANT_MAX_BUF_LEN_OCT;
其中,CONSTANT_MAX_BUF_LEN_OCT為整型常量八進(jìn)制整數(shù)O200,maxBufLenOct為變量
3)十六進(jìn)制數(shù)
與八進(jìn)制不同,十六進(jìn)制整數(shù)以“0x”開頭,如:
#define CONSTANT_MAX_BUF_LEN_HEX 0x80
int maxBufLenHex = CONSTANT_MAX_BUF_LEN_HEX;
其中,CONSTANT_MAX_BUF_LEN_HEX為整型常量十六進(jìn)制整數(shù)0x80,maxBufLenHex為變量
4)二進(jìn)制數(shù)
與八進(jìn)制不同,二進(jìn)制整數(shù)以“0b”開頭,如:
#define CONSTANT_MAX_BUF_LEN_BIN 0b10000000
int maxBufLenBin = CONSTANT_MAX_BUF_LEN_BIN;
其中,CONSTANT_MAX_BUF_LEN_BIN為整型常量二進(jìn)制整數(shù)0b10000000,maxBufLenBin為變量
注意:KEIL編譯器C99并不支持二進(jìn)制整數(shù)的表示與輸出,使用以上代碼編譯時(shí)會(huì)報(bào)錯(cuò):expected a “;”
所以,一般我們并不直接使用二進(jìn)制數(shù)作為常量給變量賦值,而是使用十六進(jìn)制,如果非要考慮使用二進(jìn)制位來表示數(shù)據(jù),可以考慮使用位域,后期會(huì)專門講解,此處不做展開。
2 浮點(diǎn)型常量與變量
浮點(diǎn)型常量以“f”結(jié)尾
#define CONSTANT_PI 3.141592f
float pi = CONSTANT_PI;
其中,CONSTANT_PI為浮點(diǎn)型常量3.141592f,pi為變量
3 字符常量與變量
用單引號界定起來的一個(gè)普通字符或轉(zhuǎn)義字符,如: ‘a(chǎn)’、‘A’、‘\n‘、'\t’等。
普通字符可以是字符集中任意一個(gè)字符。普通字符常量的值就是該字符的ASCII值。
轉(zhuǎn)義字符是一種特殊的字符常量,以反斜線“\”開頭,后跟一個(gè)或幾個(gè)字符,主要用來表示那些無法輸出的控制字符或者特殊字符。
轉(zhuǎn)義字符對照表
轉(zhuǎn)義字符 | 意義 | ASCLL碼值(十進(jìn)制) |
---|---|---|
\a | 響鈴(BEL) | 007 |
\b | 退格(BS) ,將當(dāng)前位置移到前一列 | 008 |
\f | 換頁(FF),將當(dāng)前位置移到下頁開頭 | 012 |
\n | 換行(LF) ,將當(dāng)前位置移到下一行開頭 | 010 |
\r | 回車(CR) ,將當(dāng)前位置移到本行開頭 | 013 |
\t | 水平制表(HT) (跳到下一個(gè)TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\’ | 代表一個(gè)單引號’ | 039 |
\" | 代表一個(gè)雙引號字符" | 034 |
\\ | 代表一個(gè)反斜線字符’\’ | 092 |
? | 代表一個(gè)問號? | 063 |
\0 | 空字符(NUL) | 000 |
\ddd | 1到3位八進(jìn)制數(shù)所代表的任意字符 | 三位八進(jìn)制 |
\xhh | 十六進(jìn)制所代表的任意字符 | 十六進(jìn)制 |
#define CONSTANT_ENTER '\n'
char word = CONSTANT_ENTER;
其中,CONSTANT_ENTER為字符常量’\n’,word為字符變量。
4 字符串常量與變量
用一對雙引號括起來的一個(gè)字符序列,如:“Hello World”、“Master"、“n”、"$1000”等。
存儲(chǔ):系統(tǒng)自動(dòng)在字符串常量后面加上“\0”作為字符串結(jié)束標(biāo)志。
#define CONSTANT_HELLO "Hello World\n"#define CONSTANT_MASTER "Master"char* words = CONSTANT_HELLO;words = CONSTANT_MASTER;
其中,CONSTANT_HELLO為字符串常量"Hello World\n",CONSTANT_MASTER為字符串常量"Master"。
使用了char* words定義了字符串變量,其本質(zhì)是一個(gè)字符指針。這里相當(dāng)與將CONSTANT_HELLO及CONSTANT_MASTER的首地址賦值給字符指針words。
5 符號常量
使用**#define宏定義**,前面所述的用標(biāo)識符替換各常量的表示就是符號常量。
通常將符號常量放在頭文件中,然后在源文件函數(shù)中調(diào)用。
6 變量
1)變量的定義和申明
變量的定義:變量必須經(jīng)過定義才能使用,變量的定義即為變量開辟內(nèi)存空間,開辟空間的大小即為變量類型所占的大小。變量的值的范圍以變量類型的空間大小和及符號位所決定。同一作用域變量只能定義一次。變量在源文件中定義,永遠(yuǎn)不要在頭文件中定義變量。
int a; //定義一個(gè)整型變量a
float b; //定義一個(gè)浮點(diǎn)型變量b
double c; //定義一個(gè)雙精度型變量c
char d; //定義一個(gè)字符變量d
char* p; //定義一個(gè)字符指針變量p
void test(void)
{int sizeOfA = sizeof(a); int sizeOfB = sizeof(b);int sizeOfC = sizeof(c);int sizeOfD = sizeof(d);int sizeOfP = sizeof(p);printf("size of a = %d",sizeOfA); //size of a = 4printf("size of b = %d",sizeOfB); //size of b = 4printf("size of c = %d",sizeOfC); //size of c = 8printf("size of d = %d",sizeOfD); //size of a = 1printf("size of p = %d",sizeOfP); //size of p = 4
}
?
變量的申明:加上extern關(guān)鍵字的變量即為變量聲明,同一作用域變量可聲明多次。變量可在源文件中聲明,也可在頭文件中聲明(用作外部變量)
extern int a; //申明一個(gè)整型變量a
extern float b; //申明一個(gè)浮點(diǎn)型變量b
extern double c; //申明一個(gè)雙精度型變量c
extern char d; //申明一個(gè)字符變量d
extern char* p; //申明一個(gè)字符指針變量p
2)變量的初始化
變量定義后,還需要初始化,否則其值會(huì)得到預(yù)期外的結(jié)果。
a = 1024;b = 0.001024;c = 0.0000001024;d = '\n';p = "Hello World";
3)變量的使用和賦值
變量初始化后,通過直接調(diào)用變量可得到變量的值。
printf("a = %d",a);printf("b = %f",b);printf("c = %lf",c);printf("d = %c",d);printf("p = %s",p);
4)變量的作用范圍
變量在哪里定義的,其作用范圍就在哪里,如果超出這個(gè)作用范圍,就會(huì)得到變量未定義的錯(cuò)誤。作用范圍就是{}內(nèi)部代碼塊的范圍
如
{int i = 0;}i += 1;// identifier "i" is undefined
5)全局變量與局部變量
在源文件中函數(shù)外定義的變量就是全局變量
在函數(shù)中定義的變量就是局部變量。
6)靜態(tài)變量與動(dòng)態(tài)變量
通過static修飾的變量就是靜態(tài)變量
靜態(tài)變量用作全局變量時(shí),它在整個(gè)當(dāng)前源文件都是可見的,而在文件之外是不可見的,在頭文件中使用extern聲明會(huì)得到變量未定義的錯(cuò)誤。去掉static修飾,變量用extern就可以訪問了。
靜態(tài)變量用作局部變量時(shí),在程序執(zhí)行到該變量的定義處時(shí)被首次初始化,以后的函數(shù)調(diào)用不再進(jìn)行初始化;
動(dòng)態(tài)變量在函數(shù)中,每次調(diào)用函數(shù)都會(huì)從初始值開始賦值。
int addTest(int i)
{static int sum = 0;sum += i;return sum;}int add(int i)
{int sum = addTest(i);return sum;
}void testAdd()
{int sum = 0;for (int i = 0 ; i < 100 ; i++){sum = add(i + 1);}printf("sum = %d",sum); //sum = 5050}
7)常變量
變量用const修飾時(shí),就是常變量
常變量指定義時(shí)必須顯示初始化且值不可修改的變量。與其他變量一樣被分配空間,是可以尋址的。注意,字符串常量是常變量的一種,名稱為其本身,因?yàn)槠浯鎯?chǔ)在靜態(tài)存儲(chǔ)區(qū)的常量區(qū),可尋址,不可修改。
常變量和常量的區(qū)別是:
常量不開辟內(nèi)存空間。在預(yù)編譯時(shí)就全部由符號常量的值替換了,?常變量占?內(nèi)存空間,只是此變量在存在期間不能重新賦值。
常量在計(jì)算機(jī)運(yùn)行時(shí),不會(huì)被程序修改的量,常變量是在運(yùn)行時(shí)被計(jì)算機(jī)賦予的值,其值不是唯一的。