目錄
C++命名規則,變量使用要求
變量類型及其定義形式,初始化,賦值
指針變量
變量的生存周期
C++中的轉義字符
C++關鍵字
匈牙利命名規則
[原先 C++ 變量存儲說明符與限定符 與 類型轉換 的鏈接]
(本章節中例子都是用 VS2005 編譯調試的)
C++命名規則,變量使用要求
- 在名稱中只能使用數字,字母,下划線,大小寫字母代表不同字符
- 名稱的第一個字符不能為數字,可以為下划線,字母
- 不能使用C++關鍵字用作名稱
- 在相同作用域不能聲明兩個變量名相同的變量
- 變量必須先定義后使用,為定義的變量無法使用
變量類型及其定義形式,初始化,賦值操作
符號位 unsigned(有符號位)/signed(無符號位.默認)
-------------------------------------------------------------------------------------------------------------
變量類型
- 整型 int (4字節), short (2字節), long (4字節)
- 實型 float (4字節), double (8字節)
- 字符型 char (1字節), wchar_t (2字節)
- 布爾類型 bool (1字節)
來看看一個實例:

1 void main() 2 { 3 //整型變量 4 int ia; 5 short sa; 6 long la; 7 8 //實型變量 9 double da; 10 float fa; 11 12 //字符型變量 13 char ca; 14 wchar_t wa; 15 16 //布爾型變量 17 bool ba; 18 19 cout<<"整型變量"<<endl; 20 cout<<"整型變量的占用內存空間為: "<<sizeof(ia)<<" 字節"<<endl; 21 cout<<"短整型變量的占用內存空間為: "<<sizeof(sa)<<" 字節"<<endl; 22 cout<<"長整型變量的占用內存空間為: "<<sizeof(la)<<" 字節"<<endl<<endl; 23 24 cout<<"實型變量"<<endl; 25 cout<<"實型變量的占用內存空間為: "<<sizeof(fa)<<" 字節"<<endl; 26 cout<<"雙精度實型變量的占用內存空間為: "<<sizeof(da)<<" 字節"<<endl<<endl; 27 28 cout<<"字符型變量"<<endl; 29 cout<<"字符型變量的占用內存空間為: "<<sizeof(ca)<<" 字節"<<endl; 30 cout<<"寬字符型變量的占用內存空間為: "<<sizeof(wa)<<" 字節"<<endl<<endl; 31 32 cout<<"布爾型變量"<<endl; 33 cout<<"布爾型變量的占用內存空間為: "<<sizeof(ba)<<" 字節"<<endl<<endl; 34 35 system("pause"); 36 }
輸出結果:
注意:
如果在C++中,你要想這樣:cout<<w_cn<<endl;在控制台中輸出 wchar_t 變量,那是不行的.需要用 wcout 來輸出寬字符.
-------------------------------------------------------------------------------------------------------------
形式(以整形為例) 說明
int i 定義整型變量
int *p p 為指向整型數據的指針變量
int a[n] 定義整型數組 a 有 n 個元素
int *p[n] 定義指針數組 p,有 n 個指向整型指針
int f() f 為返回整型函數值的函數
int *p() p 為返回一個指針的函數,該指針指向整型數據
int (*p)() p 為指向函數指針,該函數返回一個整型值
int **p p 為一個指針變量,它指向一個整型的指針變量
int &p=a p 為整形變量 a 的引用
int *& p2=p p2 為整形變量指針 p 的引用(可以查看這里的例子)
-------------------------------------------------------------------------------------------------------------
初始化,賦值操作
初始化---
- 賦值初始化 格式:類型 變量名 = 初始值 ;
- 直接初始化 格式:類型 變量名 (初始值) ;[傳法靈活,效率跟靈活]
例子:
1 int val=1024; 2 int val(1024);
賦值---
格式: 類型 變量名;
1 int a, b ; 2 a = 16; 3 b = a = 8; //在C++中,可以連續賦值
指針變量
變量指針
解釋:
指代你所存放的數據的地址(即數存放據的內存地址)
大小:
指針大小都為4字節(在32位操作系統中,不論是什么類型的指針,指針的大小都是相同的.一個指針就是32位的,它是操作系統尋址能力相關的)
要求:
- 指針需要初始化(雖然指針可以定義不初始化但是如果你無意中訪問了一個未初始化的指針會產生嚴重的后果)
- 不要訪問無效指針(即原先指向用new或malloc開辟出空間后又被delete或free釋放的空指針)
一個簡單例子:
1 int a = 100; 2 int *pa = &a; 3 std<<"這是a的值: "<<a<<endl; 4 std<<"這是a的地址: "<<pa<<endl;
輸出結果為
輸出 pa 的值是0x0016FCEC,這也是變量 a 在內存中地址,其關系如下圖所示
訪問指向對象:
用 * 符號來修改指向對象的數據內容
例子:
1 int a = 100; 2 int *pa = &a; 3 *pa = 10; //此時a的值被修改為10
-------------------------------------------------------------------------------------------------------------
函數指針
函數指針變量
解釋:
函數指針是指向函數的指針變量
說明:
C在編譯時,每一個函數都有一個入口地址,該入口地址就是函數指針所指向的地址.有了指向函數的指針變量后,可用該指針變量調用函數,就如同用指針變量可引用其他類型變量一樣,在這些概念上是一致的
用途:
- 調用函數
- 做函數的參數
例子:

1 // 例1 -- 用於調用函數 2 #include <iostream> 3 #include <cstdlib> 4 using namespace std; 5 6 int max(int x,int y) 7 { 8 return(x>y?x:y); 9 } 10 11 void main() 12 { 13 int (*ptr)(int, int); //聲明函數指針 14 int a,b,c; 15 ptr=max; //把max函數的入口地址賦給函數指針ptr 16 cin>>a>>b; 17 c=(*ptr)(a,b); //用函數指針調用函數 18 cout<<"a="<<a<<",b="<<b<<",max="<<c<<endl; 19 20 //當輸入 5,6時候 21 //輸出結果為 22 //a=5,b=6,max=6 23 24 system("pause"); 25 } 26 27 28 29 // 例2 -- 用於做參數 30 #include <iostream> 31 #include <cstdlib> 32 33 using namespace std; 34 35 void hello(){ 36 cout<<"hello world!\n"; 37 } 38 void runFun(void (*pFun)()){ 39 pFun(); 40 } 41 void main() 42 { 43 runFun(hello); 44 //最終控制台上會顯示 hello world! 45 46 system("pause"); 47 }
變量的生存周期
變量存儲類別 函數內 函數外
作用域 存在性 作用域 存在性
auto 與register √ √ × ×
static(局部) √ √ × √(靜態局部變量是放在程序的數據區中而不是在棧中分配空間)
static(外部) √ √ √(只限本文件) √
extern √ √ √ √
C++字符串/字符變量中的轉義字符
轉義字符--意義--ASCII碼值(十進制)
\a--響鈴(BEL)--007 \b--退格(BS)--008 \f--換頁(FF)--012
\n--換行(LF)--010 \r--回車(CR)--013 \t--水平制表(HT)--009
\v--垂直制表(VT)--011 \\--反斜杠--092 \?--問號字符--063
\'--單引號字符--039 \"--雙引號字符--034 \0--空字符(NULL)--000
\ddd--任意字符--三位八進制 \xhh--任意字符--二位十六進制
C++關鍵字
asm auto bad_cast bad_typeid bool break case catch
char class const const_cast continue default delete do
double dynamic_cast else enum except explicit extern
false finally float for friend goto if inline int
long mutable namespace new operator private protected
public register reinterpret_cast return short signed sizeof
static static_cast struct switch template this throw true
try type_info typedef typeid typename union unsigned
using virtual void volatile whil
-------------------------------------------------------------------------------------------------------------
c++保留一些詞用做各種操作的替代名詞,這些也無法用作變量名:
and,bitand,compl,mot_eq, or_eq,xor_eq,and_eq,mot,or,xor,bitor
-------------------------------------------------------------------------------------------------------------
值得注意的是在VC編程下 main 與 WinMain 並不是關鍵字,它們只是控制台程序和 windows 程序的如口函數而已
匈牙利命名規則
說明:
匈牙利命名法是微軟推廣的一種關於變量、函數、對象、前綴、宏定義等各種類型的符號的命名規范.匈牙利命名法的主要思想是:在變量和函數名中加入前綴以增進人們對程序的理解.它是由微軟內部的一個匈牙利人發起使用的,結果它在微軟內部逐漸流行起來,並且推廣給了全世界的Windows開發人員.下面將介紹匈牙利命名法,后面的例子里也會盡量遵守它和上面的代碼風格.還是那句話,並不是要求所有的讀者都要去遵守,但是希望讀者作為一個現代的軟件開發人員都去遵守它.
要求:
系統性.整體性.可讀性.分類要清楚.要有注釋!
優缺點:
這種方法的優點是使人能夠通過變量的名字來辨別變量的類型,而不比去查找它的定義.遺憾的是,這種方法不僅使變量名字非常繞口,而且使改變變量類型的工作變得十分艱巨.所以這里並不是希望你給變量取名都符合匈牙利命名規則,只是方便你在閱讀是用這種規則的別人代碼提供方便
前綴 | 類型 | 中文說明 |
a | Array | 數組 |
b | BOOL(int) | 布爾(整數) |
by | Unsigned Char(Byte) | 無符號字符(字節) |
c | Char | 字符(字節) |
cb | Count of Bytes | 字節數 |
cr | Color Reference Value | 顏色(參考)值 |
cx | Count of x(Short) | x的集合(短整數) |
f | Flags(usually multiple bit values) | 標志(一般是有多位的數值) |
fn | Function | 函數 |
g_ | Global | 全局的 |
h | Handle | 句柄 |
i | Integer | 整數 |
l | Long | 長整數 |
lp | Long Pointer | 長指針 |
m_ | Data Member of a Class | 一個類的數據成員 |
n | Short Integer | 短整數 |
p | Pointer | 指針 |
s | String | 字符串 |
sz | Zero Terminated String | 以零結尾的字符串 |
tm | Text Metric | 文本規則 |
u | Unsigned Integer | 無符號整數 |
ul | Unsigned Long(ULONG) | 無符號長整數 |
w | WORD(Unsigned Short) | 無符號短整數 |
x,y | x, y Coordinates (Short) | 坐標值(短整數) |
v | Void | 空 |
有關項目的全局變量用g_開始,類成員變量用m_,局部變量若函數較大則可考慮用l_用以顯示說明其是局部變量.
前綴 | 類型 | 例子 |
g_ | 全局變量 | g_Servers |
C | 類或者結構體 | CDocument, CPrintInfo |
m_ | 成員變量 | m_pDoc, m_nCustomers |
VC常用前綴列表:
前綴 | 類型 | 描述 | 例子 |
ch | char | 8位字符 | chGrade |
ch | TCHAR | 16位Unicode集字符 | chName |
b | BOOL | 布爾變量 | bEnable |
n | int | 整型 | nLength |
n | UINT | 無符整型 | nLength |
w | WORD | 16位無符號整型 | wPos |
l | Long | 32位有符號整型 | lOffset |
dw | DWORD | 32位無符號整型 | dwRange |
p | * | 指針變量,內存模塊指針(Ambient memory model point) | pDoc |
lp | Far* | 長指針 | lpDoc |
lpsz | LPSTR | 32位字符串指針 | lpszName |
lpsz | LPCSTR | 32位常量字符串指針 | lpszName |
lpsz | LPCTSTR | 32位Unicode集常量指針 | lpszName |
h | handle | Windows對象句柄 | hWnd |
lpfn | (*fn)() | 回調函數指針 Callback Far pointer to CALLBACK function | lpfnAbort |
MFC、句柄、控件及結構的命名規范:
Windows類型 | 樣本變量 | MFC類 | 樣本變量 |
HWND | hWnd | CWnd* | pWnd |
HDLG | hDlg | CDialog* | pDlg |
HDC | hDC | CDC* | pDC |
HGDIOBJ | hGdiObj | CGdiObject* | pGdiObj |
HPEN | hPen | CPen* | pPen |
HBRUSH | hBrush | CBrush* | pBrush |
HFONT | hFont | CFont* | pFont |
HBITMAP | hBitmap | CBitmap* | pBitmap |
HPALETTE | hPaltte | CPalette* | pPalette |
HRGN | hRgn | CRgn* | pRgn |
HMENU | hMenu | CMenu* | pMenu |
HWND | hCtl | CState* | pState |
HWND | hCtl | CButton* | pButton |
HWND | hCtl | CEdit* | pEdit |
HWND | hCtl | CListBox* | pListBox |
HWND | hCtl | CComboBox* | pComboBox |
HWND | hCtl | CScrollBar* | pScrollBar |
HSZ | hszStr | CString | pStr |
POINT | pt | CPoint | pt |
SIZE | size | CSize | size |
RECT | rect | CRect | rect |
一般前綴命名規范:
前綴 | 類型 | 實例 |
C | 類或結構 | Cdocument, CPrintInfo |
m_ | 成員變量 | m_pDoc, m_nCustomers |
變量命名規范:
前綴 | 類型 | 描述 | 實例 |
ch | char | 8位字符 | chGrade |
ch | TCHAR | 如果_UNICODE定義,則為16位字符 | chName |
b | BOOL | 布爾值 | bEnable |
n | int | 整型(其大小依賴於操作系統) | nLength |
n | UINT | 無符號值(其大小依賴於操作系統) | nHeight |
w | WORD | 16位無符號值 | wPos |
l | LONG | 32位有符號整型 | lOffset |
dw | DWORD | 32位無符號整型 | dwRange |
p | * | 指針 | pDoc |
lp | FAR* | 遠指針 | lpszName |
lpsz | LPSTR | 32位字符串指針 | lpszName |
lpsz | LPCSTR | 32位常量字符串指針 | lpszName |
lpsz | LPCTSTR | 如果_UNICODE定義,則為32位常量字符串指針 | lpszName |
h | handle | Windows對象句柄 | hWnd |
lpfn | callback | 指向CALLBACK函數的遠指針 |
前綴 | 符號類型 | 實例 | 范圍 |
IDR_ | 不同類型的多個資源共享標識 | IDR_MAIINFRAME | 1~0x6FFF |
IDD_ | 對話框資源 | IDD_SPELL_CHECK | 1~0x6FFF |
HIDD_ | 對話框資源的Help上下文 | HIDD_SPELL_CHECK | 0x20001~0x26FF |
IDB_ | 位圖資源 | IDB_COMPANY_LOGO | 1~0x6FFF |
IDC_ | 光標資源 | IDC_PENCIL | 1~0x6FFF |
IDI_ | 圖標資源 | IDI_NOTEPAD | 1~0x6FFF |
ID_ | 來自菜單項或工具欄的命令 | ID_TOOLS_SPELLING | 0x8000~0xDFFF |
HID_ | 命令Help上下文 | HID_TOOLS_SPELLING | 0x18000~0x1DFFF |
IDP_ | 消息框提示 | IDP_INVALID_PARTNO | 8~0xDEEF |
HIDP_ | 消息框Help上下文 | HIDP_INVALID_PARTNO | 0x30008~0x3DEFF |
IDS_ | 串資源 | IDS_COPYRIGHT | 1~0x7EEF |
IDC_ | 對話框內的控件 | IDC_RECALC | 8~0xDEEF |
應用程序符號命名規范:
Microsoft MFC宏命名規范:
名稱 | 類型 |
_AFXDLL | 唯一的動態連接庫(Dynamic Link Library,DLL)版本 |
_ALPHA | 僅編譯DEC Alpha處理器 |
_DEBUG | 包括診斷的調試版本 |
_MBCS | 編譯多字節字符集 |
_UNICODE | 在一個應用程序中打開Unicode |
AFXAPI | MFC提供的函數 |
CALLBACK | 通過指針回調的函數 |
庫標識符命名法:
標識符 | 值和含義 |
u | ANSI(N)或Unicode(U) |
d | 調試或發行:D = 調試,忽略標識符為發行. |
靜態庫版本命名規范:
庫 | 描述 |
NAFXCWD.LIB | 調試版本:MFC靜態連接庫 |
NAFXCW.LIB | 發行版本:MFC靜態連接庫 |
UAFXCWD.LIB | 調試版本:具有Unicode支持的MFC靜態連接庫 |
UAFXCW.LIB | 發行版本:具有Unicode支持的MFC靜態連接庫 |
動態連接庫命名規范:
名稱 | 類型 |
_AFXDLL | 唯一的動態連接庫(DLL)版本 |
WINAPI | Windows所提供的函數 |
Windows.h中新的命名規范:
類型 | 定義描述 |
WINAPI | 使用在API聲明中的FAR PASCAL位置,如果正在編寫一個具有導出API人口點的DLL,則可以在自己的API中使用該類型 |
CALLBACK | 使用在應用程序回叫例程,如窗口和對話框過程中的FAR PASCAL的位置 |
LPCSTR | 與LPSTR相同,只是LPCSTR用於只讀串指針,其定義類似(const char FAR*) |
UINT | 可移植的無符號整型類型,其大小由主機環境決定(對於Windows NT和Windows 9x為32位);它是unsigned int的同義詞 |
LRESULT | 窗口程序返回值的類型 |
LPARAM | 聲明lParam所使用的類型,lParam是窗口程序的第四個參數 |
WPARAM | 聲明wParam所使用的類型,wParam是窗口程序的第三個參數 |
LPVOID | 一般指針類型,與(void *)相同,可以用來代替LPSTR |