备忘:C++基础 -- 数据类型的学习总结
常用的幾種數(shù)據(jù)類型:
| 類型標(biāo)識符 | 說明 | 字節(jié) | 值的范圍 | ? |
| int | 整型 | 4 | –2,147,483,648 到 2,147,483,647 | VC++中為long int類 |
| short | 短整型 | 2 | –32,768 到 32,767 | ? |
| long | 長整型 | 4 | –2,147,483,648 到 2,147,483,647 | ? |
| bool | 布爾型 | 1 | false 或 true | ? |
| char | 字符型 | 1 | -128 到 127 | ? |
| float | 單精度浮點(diǎn)型 | 4 | 3.4E +/- 38(7 位數(shù)) | ? |
| double | 雙精度浮點(diǎn) | 8 | 1.7E ? +/- 308(15 位數(shù)) | ? |
| string | 字符串 | -- | ? | #include <string> |
| ? | ? | ? | ? | ? |
?在數(shù)值類型前加unsigned 標(biāo)識符,則該類型為無符號數(shù)據(jù)型,如: unsigned int, unsigned short…
可以用 typeid 來對數(shù)據(jù)類型進(jìn)行判斷:
?
int a=10; if (typeid(a)==typeid(int)) cout << "is int type" << endl;?
詳細(xì)的數(shù)據(jù)類型參見MSDN 中Virtual C++ 數(shù)據(jù)類型范圍:
http://msdn.microsoft.com/zh-cn/library/s3f49ktz.aspx
?
數(shù)組
定義數(shù)組的一般形式為:
類型標(biāo)識符 數(shù)組名[常量表達(dá)式][常量表達(dá)式]…
int a[10], b[2*5]; int a[n*2]; //假設(shè)前面已定義了n為常變量 float a[3][4], b[5][10];使用指針創(chuàng)建動(dòng)態(tài)數(shù)組:
int n; DATE *pd; // 假設(shè)pd是個(gè)結(jié)構(gòu)類型n = 3;pd = new DATE[n]; pd[0].year = 2010; pd[1].year = 2011; pd[2].year = 2014; cout << pd[0].year << pd[2].year << endl; delete[] pd; // 及時(shí)釋放內(nèi)存枚舉
聲明枚舉類型的一般形式為:
?? enum 枚舉類型名{枚舉常量表列};
?
enum WEEKDAYS {sunDay, monDay, tueDay, wedDay, thuDay, friDay, satDay} WEEKDAYS D; // 聲明變量 D WEEKDAYS D = sunDay; // 符值 if (D!=satDay) { cout<<D<<endl; }?
結(jié)構(gòu)
聲明一個(gè)結(jié)構(gòu)體類型的一般形式為:
??? struct? 結(jié)構(gòu)體類型名 {成員表列} [變量名表列];
struct BOOK{string title;float price; }; BOOK bk; // 聲明 bk 為結(jié)構(gòu)類BOOK bk.title = "標(biāo)題"; // 引用結(jié)構(gòu)體成員,并符值 bk.price = 12.23;指針
指針是指向一個(gè)變量的地址。我們將一個(gè)變量的地址稱為該變量的指針。認(rèn)真理解好指針,在C++編程會有很好的應(yīng)用。主要學(xué)習(xí)了解好指針在指向類或數(shù)組時(shí)的關(guān)系。
定義指針變量的一般形式為:
基類型 *指針變量名;
int a, b; //定義變量 int *pa, *pb; //定義指針定義指針用 * 指針符。
取 一個(gè)變量的地址用取地址運(yùn)算符 &, 在運(yùn)算中 * 是指針指向符,注意,這時(shí)*與定義指針變量時(shí)的 * 意義不同。定義指針變量時(shí) 如 int *n; 這時(shí) * 只代表變量是個(gè)指針型變量,*是沒意義的,只是一個(gè)告訴我們,這個(gè)變量n是指針型的。在運(yùn)算時(shí),如 *n=10; 或 a=*n;? 這時(shí)的 * 是指向符,是個(gè)運(yùn)算符,意思是指向 n 所在的數(shù)據(jù)。*n 取得的是內(nèi)存中的數(shù)據(jù)。
& 取地址運(yùn)算符。
* 指針運(yùn)算符(或稱間接訪問運(yùn)算符)。
-> 指針成員指向符
?
例如:
int a=3; int *pa;pa = &a; // 將 a 的地址賦給指針變量 pa; 這時(shí)*pa的值等于a的值。 *pa = 123; // 在指針變量 pa前加上 * (指針運(yùn)算符)即表示 *pa指向 a的實(shí)體值。 // 相當(dāng)于a的一個(gè)指向表示符,與a等價(jià)。 cout << *pa << endl;類與指針:
類名實(shí)際上是一個(gè)地址指向。可以通過指針運(yùn)符 & 來取得這個(gè)指針地址。
使用指針指向類時(shí)。可以*指向符加指針變量名,如 *p. 來訪問類的成員。使用->指針的成員指向符
數(shù)組與指針
數(shù)組名實(shí)際上也是一個(gè)地址指向。(與類名同理)
如 int n[10] n是指向一串int型數(shù)據(jù)的首內(nèi)存
數(shù)組[]符號,實(shí)妹是變址運(yùn)算符。 [1] 是指這一串int數(shù)據(jù)內(nèi)存中的第2個(gè)地址([0]是第一個(gè))。
對數(shù)組 n[1] 的理解是 先用[1]求地址,再用n[1]找出地址所指向的數(shù)據(jù)值。可以這樣理解 n[1]是 n在地址 xxxx中的數(shù)據(jù),而地址xxxx就是通過變址符[] 中[1]求得的。
再看指針與數(shù)據(jù)的關(guān)系。
指針 int *p中,p是一個(gè)地址。*p才是指針指向的數(shù)據(jù)。
數(shù)據(jù) int n[10]中,m也是一個(gè)地址。m[0]才是指向第一個(gè)數(shù)據(jù)的。
可以看出。指針p 與數(shù)組變量m是一樣的。都是地址。*p與m[0]一樣。都是指向數(shù)據(jù)。這里[0]相當(dāng)于*運(yùn)算符。類似于 *(m0) 假設(shè)m0是指數(shù)據(jù)串中的第一個(gè)數(shù)據(jù)。
因些,指針以對應(yīng)單個(gè)變更與數(shù)組變量時(shí),指向意思是有不同的。
看例子
int n, m[10];
int *p;
p=n; 不對。因?yàn)閜是指向地址的,n是指向數(shù)據(jù)的。這時(shí)要用取地址符&。p=&n;
p=m; 對。因?yàn)閿?shù)組m[10]. m就是指向地址的是一串?dāng)?shù)據(jù)中的首地址。等同于 p=&m[0].
p=m[0]; 不對。這里 m[0]是指向地址的。相當(dāng)于 n 一樣,這時(shí)要用取地址符& p=&m[0]。
p++; *p++; (*p)++; 比較下這三者的不同。
p++是指地址下移。
*p++是指下移后的地址所指向的數(shù)據(jù)。即 *(p++)
(*p)++ 是指 p所指向的數(shù)據(jù)值加1.
p即然是指向地址的。那么p+1 實(shí)際是將地址移向下一個(gè)地址。等同于 m中的[0+1]。
p[0]實(shí)際同m[0]等價(jià)。
*(p++)與*(++p)作用不同。前者是先取*p值,然后使p加1。后者是先使p加1,再取*p。若p的初值為a(即&a[0]),輸出*(p++)得到a[0]的值,而輸出*(++p)則得到a[1]的值。
x=*(p++) 先進(jìn)行“*”運(yùn)算,得到a[i],x=a[i]; 再使p+1,p指向a[i+1]了。
x=*(++p)??先使p自加1,再作*運(yùn)算,得到a[i+1]。x=a[i+1] p也指向a[i+1]
?數(shù)據(jù)指針的使用示例:
定義一個(gè)二組數(shù)據(jù):
int M[2][12] = {{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, // 數(shù)據(jù)集1 { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } //數(shù)據(jù)集2 }; int (*p)[12], *p1; p = &M[0]; p1 = &M[0][0]; (*p)[0] = 1; // 給M[0][0] 賦值 等價(jià): (*p)[0] = 1; *(p[0]) = 1; p1[0] = 2; // 給M[0][0] 賦值 注意用法與 *p[0]的不同。這里的[0]實(shí)際是取址轉(zhuǎn)向符. cout << *p << '/' << *p[0] << '/' << *p1 << '/' << p1[0] << endl; cout << p << '/' << p[0] << '/' << p1 << '/' << endl;想取得數(shù)組中一組數(shù)據(jù)中的M[1] 與 M[2] 的數(shù)據(jù)集.
可以顯性定義個(gè)數(shù)維指針 int (*P)[12],并符值指針給P ??P = &M [1]; 或 P = &M [2];
取值或符值時(shí),可以通過 (*P)[0] = 125;? X = (*P)[0];
只有用心理解了數(shù)組與數(shù)組指針的關(guān)系。才能得心應(yīng)手地使用好C++中字符串。
引用
引用是為一個(gè)變量起一個(gè)別名。用引用符號 & 來表示引用變量。(注:這里的&與指針變針符&的意義不同)
定義引用的一般形式為:
????基類型 &引用變量名;
在聲明一個(gè)引用類型變量時(shí),必須同時(shí)使之初始化,并且不能再給其重新賦值。引用變量具有唯一指向性且要在初始化時(shí)指定其指向。在聲明變量b是變量a的引用后,在它們所在函數(shù)執(zhí)行期間,該引用類型變量b始終與其代表的變量a相聯(lián)系,不能再作為其他變量的引用(別名)。
利用引用,可以方便地使指針型變量轉(zhuǎn)化為實(shí)體變量。
CTest a; // CTest是一個(gè)類。 CTest *pa; // 聲明一個(gè)類的指針 CTest &b=*pa; // 聲明一個(gè)引用變量,并指向一個(gè)指針。 pa = &a; // 將 a 的地址賦予指針變量 pa, 這是可以用別名引用 b來指向a b.x = 10; // 相當(dāng)于 a.x = 10 與 *pa->x// 這時(shí)b 是 *pa的引用別名。或者說 b 是 *pa指向的類的實(shí)體別名。b 與 a 等價(jià)。使用b相當(dāng)于直接使用a。這里使用引用別名,主要是方便用類的成員符號 . 來代替指針的成員指向符號 ->。使代碼更直觀,書寫更方便。
?引用還常用于函數(shù)的參數(shù)傳遞。如:
void DoFunc(int &b) {b++; }// 注意:跟指針作下比較 void Dofunc(int *b) { *b++; }?
轉(zhuǎn)載于:https://www.cnblogs.com/iSixth/p/4178962.html
總結(jié)
以上是生活随笔為你收集整理的备忘:C++基础 -- 数据类型的学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过案例学调优之--Oracle Clu
- 下一篇: 【haproxy初始化】init_hap