P4.常量
基本介紹:
1) 常量是固定值,在程序執(zhí)行期間不能改變。這些固定的值,又叫做字面量。?
2) 常量可以是任何的基本數(shù)據(jù)類型,比如整數(shù)常量、浮點(diǎn)常量、字符常量,或字符串 字面值,也有枚舉常量。?
3) 常量的值在定義后不能進(jìn)行修改。
經(jīng)常使用的常量
1.整數(shù)常量:
1) 整數(shù)常量可以是十進(jìn)制、八進(jìn)制或十六進(jìn)制的常量。
前綴指定基數(shù):0x 或 0X 表示 十六進(jìn)制,0 表示八進(jìn)制,不帶前綴則默認(rèn)表示十進(jìn)制。整數(shù)常量也可以帶一個(gè)后綴,后綴是 U 和 L 的組合,U 表示無符號(hào)整數(shù)(unsigned),L 表示長(zhǎng)整數(shù)(long)。 后綴可以是大寫,也可以是小寫,U 和 L 的順序任意。
2) 整數(shù)常量舉例說明:
85 /* 十進(jìn)制 */?
0213 /* 八進(jìn)制 */?
0x4b /* 十六進(jìn)制 */(八進(jìn)制和十六進(jìn)制后面解釋 )
30 /* 整數(shù) */?
30u /* 無符號(hào)整數(shù) */?
30l /* 長(zhǎng)整數(shù) */?
30ul /* 無符號(hào)長(zhǎng)整數(shù) */
2.浮點(diǎn)常量:
1) 浮點(diǎn)常量由整數(shù)部分、小數(shù)點(diǎn)、小數(shù)部分和指數(shù)部分組成。您可以使用小數(shù)形式或 者指數(shù)形式來表示浮點(diǎn)常量。?
2) 浮點(diǎn)常量舉例說明:
3.14159; //double常量?
314159E-5; // 科學(xué)計(jì)數(shù)法?
3.1f; //float常量
3.字符常量:
1) 字符常量是括在單引號(hào)中,例如,'x' 可以存儲(chǔ)在 char 類型的變量中。字符常量可 以是一個(gè)普通的字符(例如 'x')、一個(gè)轉(zhuǎn)義序列(例如 '\t'。?
2) 字符常量舉例說明:
'X'
'Y'
'A'
'b'
'1'
'\t'
4.字符串常量:
1) 字符串字面值或常量是括在雙引號(hào) "" 中的。
一個(gè)字符串包含類似于字符常量的字符:普通的字符、轉(zhuǎn)義序列和通用的字符。可以使用空格做分隔符,把一個(gè)很長(zhǎng)的 字符串常量進(jìn)行分行?
2) 字符串常量舉例說明:
"hello, world"
"北京" "hello \ world"

常量的定義
定義常量的兩種方式:
1) 使用 #define 預(yù)處理器。?
2) 使用 const 關(guān)鍵字。
(1)?#define 預(yù)處理器:
1) #define 預(yù)處理器定義常量的形式 #define 常量名 常量值?
案例演示:
#define PI 3.14 //定義常量 PI 常量值3.14 ?
int main() {?
//PI = 3.1415 可以嗎? //不可以修改
double area; ?
double r = 1.2;//半徑?
area = PI * r * r;?
printf("面積 : %.2f", area);?
getchar();?
return 0;?
}
const 關(guān)鍵字:
1) 可以使用 const 聲明指定類型的常量 const 數(shù)據(jù)類型 常量名 = 常量值;?
案例演示:
const double PI = 3.14; ?
int main() {?
//PI = 3.1415 可以嗎? //也不可以修改
double area; ?
double r = 1.2;?
area = PI * r * r;?
printf("面積 : %.2f", area);?
getchar();?
return 0;?
}

const 和 #define的區(qū)別:
1) const定義的常量時(shí),帶類型,define不帶類型?
2) const是在 編譯、運(yùn)行的時(shí)候起作用,而define是在編譯的預(yù)處理階段起作用?
3) define只是簡(jiǎn)單的替換,沒有類型檢查。簡(jiǎn)單的字符串替換會(huì)導(dǎo)致邊界效應(yīng)[案例演 示].?
4) const常量可以進(jìn)行調(diào)試的,define是不能進(jìn)行調(diào)試的,主要是預(yù)編譯階段就已經(jīng)替 換掉了,調(diào)試的時(shí)候就沒它了?
5) const不能重定義,不可以定義兩個(gè)一樣的,而define通過undef取消某個(gè)符號(hào)的定義, 再重新定義 [案例]?
6) define可以配合#ifdef、 #ifndef、 #endif 來使用, 可以讓代碼更加靈活,比如我們 可以通過#define 來 啟動(dòng)或者關(guān)閉 調(diào)試信息。[案例]
我的源碼及注釋:
#include <stdio.h>
//#define 預(yù)處理器定義常量的形式? ?#define 常量名 常量值
#define PI 3.14 //定義一個(gè)常量PI,值(常量值)為3.14
//常量值不可以修改,修改報(bào)錯(cuò),提示:表達(dá)式必須是可以修改的左值(也就是說不可修改)
int main(){
double area;
double r = 3;
area = PI * r * r;
printf("圓的面積area=%.3f",area);
getchar();
return 0;//int mian需要一個(gè)返回值
}


#include <stdio.h>
//const是一個(gè)關(guān)鍵字,規(guī)定好的,表示后面定義了一個(gè)變量
//PI是常量名,即是一個(gè)常量,常量值是3.14
//PI常量不可以修改
//const定義常量是,必須加英文分號(hào),define定義的常量可以不加英文分號(hào)。
//其實(shí)預(yù)定義的都一樣不要加,后面再詳講,加了有問題
const double PI = 3.14;
int main(){
double area;
double r = 3;
area = PI * r * r;
printf("圓的面積area=%0.3f",area);
getchar();
return 0;
}


/*
1.const定義的常量時(shí),帶類型,define不帶類型【const 類型 常量名 常量值;】【#define 常量名 常量值】
2.const在編譯、運(yùn)行的時(shí)候起作用,而define是在編譯的預(yù)處理(也叫預(yù)編譯)階段起作用
3.define只是簡(jiǎn)單的替換,沒有類型檢查。簡(jiǎn)單的字符串替換會(huì)導(dǎo)致 邊界效應(yīng)
4.const常量可以進(jìn)行調(diào)試,define是不能進(jìn)行調(diào)試的,主要是預(yù)編譯階段就已經(jīng)替換掉了,在調(diào)試的時(shí)候沒有它了。
5.const不能重定義,不可以定義兩個(gè)常量名一樣的常量,而define通過undef取消某個(gè)符號(hào)的定義,再重新定義。
6.define可以配合#ifdef、#ifndef(就是ifnodef 沒有定義的意思)、#endif來使用,可以讓代碼更加靈活,比如我們通過#define來 啟動(dòng)或關(guān)閉 調(diào)試信息。
*/
#include <stdio.h>
//3.什么是邊界效應(yīng)?看個(gè)例子,
#define A 3
#define B A+3
#define C A/B * 3
//#define 就是一個(gè)簡(jiǎn)單的替換,如果要看成整體,需要加一個(gè)括號(hào),比如 把B看成一個(gè)整體,#define B (A+3)
//5.const不能重定義,不可以定義兩個(gè)常量名一樣的常量,而define通過undef取消某個(gè)符號(hào)的定義,再重新定義。
const double PI = 3.14;
//const double PI = 3.1415;//不能重復(fù)定義
#define PI2 3.14
#undef PI2 //取消PI2的定義
#define PI2 3.1415
int main(){
//2.預(yù)編譯是在編譯前的一個(gè)階段(對(duì)前面的補(bǔ)充),編譯形成.obj目標(biāo)文件。
printf("C=%d",C);//輸出10
getchar();
}

#include <stdio.h>
#define DEBUG
//#undef DEBUG,也可以直接刪除 #define DEBUG
void main(){
#ifdef DEBUG //如果定義了DEBUG
printf("OK,定義了DEBUG");
#endif //表示結(jié)束
#ifndef DEBUG //如果 沒有 定義了DEBUG
printf("NO,沒有定義DEBUG");
#endif //表示結(jié)束
getchar();
}