在程序運行中,其值不能改變的量成為常量。
在基本數據類型中,常量可分為整型常量、實型常量、符號常量和字符型常量(包括字符常量和字符串常量),現分別介紹如下:
目錄:
一、常量
二、C語言標識符
三、變量
四、變量命名規則
附錄:ASCII碼表
一、常量
1.整型常量
即整常數,由一個或多個數字組成,可以帶正負號
C語言中整型常量可用十進制、八進制和十六進制3種形式表示
十進制整數:由0~9數字組成,不能以0開始,沒有前綴
八進制整數:以0為前綴,其后由0~7的數字組成,沒有小數部分
十六進制整數:以0x或0X開頭,其后由0~9的數字和a~f(或A~F字母組成)
另外長整型常量后加后綴L(或1),無符號常量后加后綴U(或u)
2.實型常量
C語言中,實數又稱浮點數一般有兩種表示形式
十進制小數形式:由數字和小數點組成,必須有小數點(例如 .24 也合法)
指數形式:有十進制數、階碼標志“e”或“E”和階碼組成,階碼只能是整數。e和E前面必須有數字,后面必須是整數
實型常量的類型:C編譯系統對實型常量不分float和double,都作double處理以更精確,也可以在實型常量后面加上字母f或F來指定其為單精度實型(float)
3.符號常量
C語言中,可以用一個標識符表示一個常量,稱之為符號常量,即標識形式的常量
符號常量是一種特殊的常量,其值和類型是通過符號常量的定義決定的
符號常量在使用之前必須定義,一般形式如下:
#define 標識符常量
(#define是一條預處理命令,其功能是把命令格式中的標識符定義為其后的常量值)
習慣上,為了與程序中的變量名區別,符號常量名一般用大寫字母表示
4.字符型常量
包括字符常量和字符串常量
(1)字符常量:
又稱字符常數,C語言中的字符常量是用單引號括起來的字符,區分大小寫
字符常量有以下特點:
①字符常量只能用單引號括起來
單引號只起界定作用,不表示字符本身
單引號中只能由一個字符,字符可以是字符集中的任意字符
單引號中的字符不能是單引號(')和反斜線(\)
②每個字符常量都有一個整數值,就是該數的ASCII碼(見附錄)
③字符常量區分大小寫
對於一些常用但卻難以用一般形式表示的不可顯示字符,C語言提供了一種特殊形式的字符常量,即用一個轉義標識符“\”(反斜線)開頭的字符序列,如表(轉義字符及其含義):
(2)字符串常量:
字符串常量是用一對雙引號括起來的字符串序列
C語言規定字符串常量的存儲方式為:
字符串中的每個字符以其ASCII碼值得二進制形式存放在內存中,並且系統自動在該字符串末尾加一個“字符串結束標志”
('\0',即ASCII碼值為0的字符,它不引起人和控制動作,也不是可顯示的字符)
以便系統判斷字符串是否結束。例:字符串"a",實際長度為2,包含'a'和'\0'
二、C語言標識符
用來標識變量名、符號常量名、函數名、類型名和文件名等的有效字符序列稱為標識符
1.標識符由字母(A-Z,a-z)、數字(0-9)、下划線“_”組成,並且首字符不能是數字,但可以是字母或者下划線。例如,正確的標識符:abc,a1,prog_to
2.不能把C語言關鍵字作為用戶標識符,例如if ,for, while等
3.標識符長度是由機器上的編譯系統決定的,一般的限制為8字符(注:8字符長度限制是C89標准,C99標准已經擴充長度,其實大部分工業標准都更長)
4.標識符對大小寫敏感,即嚴格區分大小寫。一般對變量名用小寫,符號常量命名用大寫
5.標識符命名應做到“見名知意”,例如,長度(外語:length),求和、總計(外語:sum),圓周率(外語:pi)……
6.C語言中把標識符分為三類:關鍵字,預定義標識符,用戶自定義標識符
三、變量
變量只是在程序中可以改變的量,一旦被定義,就具備了3個基本要素:變量名、變量類型和變量值
1.變量名:
變量的命名規則:http://www.cnblogs.com/onedime/archive/2012/11/21/2780149.html
2.變量類型:
C語言中變量遵循“先定義后使用”的原則,變量定義的形式一般為:
變量類型 變量表名
其中變量類型即為變量中所存儲的數據類型,數據類型概念詳見之前博客「C語言」數據類型及混合運算與類型轉換
(1)整型變量
①整型數據在內存中的存放。在C語言中,可以使用十進制,八進制和十六進制數據,但在內存中都以二進制存
②整型變量的基本類型說明符為int。根據占用內存字節數不同可以將整型變量分為如下幾類:
基本整型:int,在16位系統中占2字節,32位系統中占4字節
短整型:short int或short,在大多數計算機系統中占2字節
長整型:long int或long,一般占4字節
整型變量的類型:
有符號短整型:short [int] 2byte -32768~32767
無符號短整型:unsigned short [int] 2 byte 0~65535
有符號整型:int /signed [int] 4 byte -2147483648~2147483647
無符號整型:unsigned [int] 4 byte 0~4294967295
有符號長整型:long [int]/signed long [int] 4 byte -2147483648~2147483647
③整型數據的溢出。在C語言中,如果一個變量的值超過了其類型所允許的最大值,則會出現溢出現象
具體數據溢出測試詳見之前博客「C語言」原碼反碼補碼與位運算
(2)實型變量
①實型數據在內存中的存放。實型數據在內存中占4字節,按照指數形式存儲,存放形式如下:
符號位+小數部分+指數部分
注意:所有實型數據均為有符號實型數,沒有無符號實型數
至於在內存中究竟分別用多少位表示小數部分和指數部分,ANSI C並無具體規定,由各C編譯系統決定
②C語言提供的常用實型變量類型有單精度型(float)和雙精度型(double),有時也用長雙精度型(long double)
實型變量類型:
單精度型:float 4 byte -3.4e38~3.4e38 6~7位有效位
雙精度型:double 8 byte -1.7e308~1.7e308 15~16位有效位
長雙精度型:long double 16 byte -3.4e4932~3.4e4932 18~19位有效位
③實型數據的舍入誤差。有限的存儲單元能提供的有效數字是有限的,因此會存在實型數據的計算舍入誤差
字符變量
字符變量是用來存儲字符常量的,每個字符占用一個字節的存儲空間,類型名為char
字符變量的類型:
無符號字符型unsigned char 1 byte 0~255
3.變量值:
在 程序中,一個變量必須先由確定的值后才能參與各種相應的操作
變量可以通過賦值語句或輸入語句獲得一個值,也可以用初始化的方法獲得一個值
四、變量命名規則
內容摘抄自 http://www.cnblogs.com/onedime/archive/2012/11/21/2780149.html
1)命名應當直觀且可以拼讀,可望文知意,便於記憶和閱讀。
標識符最好采用英文單詞或其組合,不允許使用拼音。程序中的英文單詞一般不要太復雜,用詞應當准確。
2)命名的長度應當符合“min-length && max-information”原則。
C 是一種簡潔的語言, 命名也應該是簡潔的。例如變量名MaxVal 就比MaxValueUntilOverflow 好用。標識符的長度一般不要過長,較長的單詞可通過去掉“元音”形成縮寫。
另外,英文詞盡量不縮寫,特別是非常用專業名詞,如果有縮寫,在同一系統中對同一單詞必須使用相同的表示法,並且注明其意思。
3)當標識符由多個詞組成時,每個詞的第一個字母大寫,其余全部小寫。比如:
int CurrentVal;
這樣的名字看起來比較清晰,遠比一長串字符好得多。
4)盡量避免名字中出現數字編號,如Value1,Value2 等,除非邏輯上的確需要編號。比如驅動開發時為管腳命名,非編號名字反而不好。
初學者總是喜歡用帶編號的變量名或函數名,這樣子看上去很簡單方便,但其實是一顆顆定時炸彈。這個習慣初學者一定要改過來。
5)對在多個文件之間共同使用的全局變量或函數要加范圍限定符(建議使用模塊名(縮寫)作為范圍限定符)。
(GUI_ ,etc)標識符的命名規則:
6)標識符名分為兩部分:規范標識符前綴(后綴) + 含義標識。非全局變量可以不用使用范圍限定符前綴。

7)作用域前綴命名規則。

8)數據類型前綴命名規則。



9)含義標識命名規則,變量命名使用名詞性詞組,函數命名使用動詞性詞組。例如:

變量含義標識符構成:目標詞+ 動詞(的過去分詞)+ [狀語] + [目的地];

函數含義標識符構成:動詞(一般現時)+目標詞+[狀語]+[目的地];
10)程序中不得出現僅靠大小寫區分的相似的標識符。例如:
int x, X; 變量x 與X 容易混淆
void foo(int x); 函數foo 與FOO 容易混淆
void FOO(float x);
這里還有一個要特別注意的就是1(數字1)和l(小寫字母l)之間,0(數字0)和o(小寫字母o)之間的區別。這兩對真是很難區分的,我曾經的一個同事就被這個問題折騰了一次。
11)一個函數名禁止被用於其它之處。例如:
#include "c_standards.h"
void foo(int p_1)
{
int x = p_1;
}
void static_p(void)
{
int foo = 1u;
}
12)所有宏定義、枚舉常數、只讀變量全用大寫字母命名,用下划線分割單詞。例如:
const int MAX_LENGTH = 100; //這不是常量,而是一個只讀變量,具體請往后看
#define FILE_PATH “/usr/tmp”
13)考慮到習慣性問題,局部變量中可采用通用的命名方式,僅限於n、i、j 等作為循環變量使用。
一定不要寫出如下這樣的代碼:
int p;
char i;
int c;
char * a;
一般來說習慣上用n,m,i,j,k 等表示int 類型的變量;c,ch 等表示字符類型變量;a 等表示數組;p 等表示指針。當然這僅僅是一般習慣,除了i,j,k 等可以用來表示循環變量外,別的字符變量名盡量不要使用。
14)定義變量的同時千萬千萬別忘了初始化。定義變量時編譯器並不一定清空了這塊內存,它的值可能是無效的數據。這個問題在內存管理那章有非常詳細的討論,請參看。
15)不同類型數據之間的運算要注意精度擴展問題,一般低精度數據將向高精度數據擴展。
附錄:ASCII碼表
截圖自 http://tool.oschina.net/commons?type=4
原文地址:https://www.cnblogs.com/corvoh/p/5154848.html