日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

备忘:C++基础 -- 数据类型的学习总结

發(fā)布時間:2025/3/20 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 备忘:C++基础 -- 数据类型的学习总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

常用的幾種數(shù)據(jù)類型:

類型標識符

說明

字節(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

單精度浮點型

4

3.4E +/- 38(7 位數(shù))

?

double

雙精度浮點

8

1.7E ? +/- 308(15 位數(shù))

?

string

字符串

--

?

#include <string>

?????

?在數(shù)值類型前加unsigned 標識符,則該類型為無符號數(shù)據(jù)型,如: unsigned int, unsigned short…

可以用 typeid 來對數(shù)據(jù)類型進行判斷:

?

int a=10; if (typeid(a)==typeid(int)) cout << "is int type" << endl;

?

詳細的數(shù)據(jù)類型參見MSDN 中Virtual C++ 數(shù)據(jù)類型范圍:
http://msdn.microsoft.com/zh-cn/library/s3f49ktz.aspx

?

數(shù)組

定義數(shù)組的一般形式為:

類型標識符 數(shù)組名[常量表達式][常量表達式]…

int a[10], b[2*5]; int a[n*2]; //假設前面已定義了n為常變量 float a[3][4], b[5][10];

使用指針創(chuàng)建動態(tài)數(shù)組:

int n; DATE *pd; // 假設pd是個結構類型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; // 及時釋放內(nèi)存

枚舉

聲明枚舉類型的一般形式為:

?? enum 枚舉類型名{枚舉常量表列};

?

enum WEEKDAYS {sunDay, monDay, tueDay, wedDay, thuDay, friDay, satDay} WEEKDAYS D; // 聲明變量 D WEEKDAYS D = sunDay; // 符值 if (D!=satDay) { cout<<D<<endl; }

?

結構

聲明一個結構體類型的一般形式為:

??? struct? 結構體類型名 {成員表列} [變量名表列];

struct BOOK{string title;float price; }; BOOK bk; // 聲明 bk 為結構類BOOK bk.title = "標題"; // 引用結構體成員,并符值 bk.price = 12.23;

指針

指針是指向一個變量的地址。我們將一個變量的地址稱為該變量的指針。認真理解好指針,在C++編程會有很好的應用。主要學習了解好指針在指向類或數(shù)組時的關系。

定義指針變量的一般形式為:

基類型 *指針變量名;

int a, b; //定義變量 int *pa, *pb; //定義指針

定義指針用 * 指針符。

取 一個變量的地址用取地址運算符 &, 在運算中 * 是指針指向符,注意,這時*與定義指針變量時的 * 意義不同。定義指針變量時 如 int *n; 這時 * 只代表變量是個指針型變量,*是沒意義的,只是一個告訴我們,這個變量n是指針型的。在運算時,如 *n=10; 或 a=*n;? 這時的 * 是指向符,是個運算符,意思是指向 n 所在的數(shù)據(jù)。*n 取得的是內(nèi)存中的數(shù)據(jù)。

& 取地址運算符。
* 指針運算符(或稱間接訪問運算符)。
-> 指針成員指向符

?

例如:

int a=3; int *pa;pa = &a; // 將 a 的地址賦給指針變量 pa; 這時*pa的值等于a的值。 *pa = 123; // 在指針變量 pa前加上 * (指針運算符)即表示 *pa指向 a的實體值。 // 相當于a的一個指向表示符,與a等價。 cout << *pa << endl;

類與指針:

類名實際上是一個地址指向。可以通過指針運符 & 來取得這個指針地址。
使用指針指向類時??梢?指向符加指針變量名,如 *p. 來訪問類的成員。使用->指針的成員指向符

CTest a; // 假定CTest是一個類。 CTest *pa; // 定義一個類的指針。 pa = &a; // 通過類名取地址,并將地址符給指針pa *pa->x = 10; // 假定 x 是類的一個變量成員。指針用 -> 引用這個變量。即 *pa->x 與 a.x 等價。

數(shù)組與指針

數(shù)組名實際上也是一個地址指向。(與類名同理)
如 int n[10] n是指向一串int型數(shù)據(jù)的首內(nèi)存
數(shù)組[]符號,實妹是變址運算符。 [1] 是指這一串int數(shù)據(jù)內(nèi)存中的第2個地址([0]是第一個)。
對數(shù)組 n[1] 的理解是 先用[1]求地址,再用n[1]找出地址所指向的數(shù)據(jù)值??梢赃@樣理解 n[1]是 n在地址 xxxx中的數(shù)據(jù),而地址xxxx就是通過變址符[] 中[1]求得的。

再看指針與數(shù)據(jù)的關系。

指針 int *p中,p是一個地址。*p才是指針指向的數(shù)據(jù)。

數(shù)據(jù) int n[10]中,m也是一個地址。m[0]才是指向第一個數(shù)據(jù)的。

可以看出。指針p 與數(shù)組變量m是一樣的。都是地址。*p與m[0]一樣。都是指向數(shù)據(jù)。這里[0]相當于*運算符。類似于 *(m0) 假設m0是指數(shù)據(jù)串中的第一個數(shù)據(jù)。

因些,指針以對應單個變更與數(shù)組變量時,指向意思是有不同的。

看例子

int n, m[10];

int *p;

p=n; 不對。因為p是指向地址的,n是指向數(shù)據(jù)的。這時要用取地址符&。p=&n;

p=m; 對。因為數(shù)組m[10]. m就是指向地址的是一串數(shù)據(jù)中的首地址。等同于 p=&m[0].

p=m[0]; 不對。這里 m[0]是指向地址的。相當于 n 一樣,這時要用取地址符& p=&m[0]。

p++; *p++; (*p)++; 比較下這三者的不同。

p++是指地址下移。

*p++是指下移后的地址所指向的數(shù)據(jù)。即 *(p++)

(*p)++ 是指 p所指向的數(shù)據(jù)值加1.

p即然是指向地址的。那么p+1 實際是將地址移向下一個地址。等同于 m中的[0+1]。

p[0]實際同m[0]等價。

*(p++)與*(++p)作用不同。前者是先取*p值,然后使p加1。后者是先使p加1,再取*p。若p的初值為a(即&a[0]),輸出*(p++)得到a[0]的值,而輸出*(++p)則得到a[1]的值。

x=*(p++) 先進行“*”運算,得到a[i],x=a[i]; 再使p+1,p指向a[i+1]了。

x=*(++p)??先使p自加1,再作*運算,得到a[i+1]。x=a[i+1] p也指向a[i+1]

?數(shù)據(jù)指針的使用示例:

定義一個二組數(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] 賦值 等價: (*p)[0] = 1; *(p[0]) = 1; p1[0] = 2; // 給M[0][0] 賦值 注意用法與 *p[0]的不同。這里的[0]實際是取址轉向符. cout << *p << '/' << *p[0] << '/' << *p1 << '/' << p1[0] << endl; cout << p << '/' << p[0] << '/' << p1 << '/' << endl;

想取得數(shù)組中一組數(shù)據(jù)中的M[1] 與 M[2] 的數(shù)據(jù)集.
可以顯性定義個數(shù)維指針 int (*P)[12],并符值指針給P ??P = &M [1]; 或 P = &M [2];
取值或符值時,可以通過 (*P)[0] = 125;? X = (*P)[0];

只有用心理解了數(shù)組與數(shù)組指針的關系。才能得心應手地使用好C++中字符串。

引用

引用是為一個變量起一個別名。用引用符號 & 來表示引用變量。(注:這里的&與指針變針符&的意義不同)

定義引用的一般形式為:
????基類型 &引用變量名;

int a; int &b = a; // 引用必須在聲明指定他的對象。 不能寫成 int &b; &b = a; b = 10; // 即 a=10 這里 b就是a, 他們合體了。 // 再看下指針取址符 & int x; int *p; x=12; p = &x; // 注 引用 &b 跟 指針中取地址的&不同 b = *p; // &b=x; p = &b; // 這里不是將b的值賦給p,而是將 a的地址賦給p 現(xiàn)在 *p = a;

在聲明一個引用類型變量時,必須同時使之初始化,并且不能再給其重新賦值。引用變量具有唯一指向性且要在初始化時指定其指向。在聲明變量b是變量a的引用后,在它們所在函數(shù)執(zhí)行期間,該引用類型變量b始終與其代表的變量a相聯(lián)系,不能再作為其他變量的引用(別名)。

利用引用,可以方便地使指針型變量轉化為實體變量。

CTest a; // CTest是一個類。 CTest *pa; // 聲明一個類的指針 CTest &b=*pa; // 聲明一個引用變量,并指向一個指針。 pa = &a; // 將 a 的地址賦予指針變量 pa, 這是可以用別名引用 b來指向a b.x = 10; // 相當于 a.x = 10 與 *pa->x

// 這時b 是 *pa的引用別名?;蛘哒f b 是 *pa指向的類的實體別名。b 與 a 等價。使用b相當于直接使用a。這里使用引用別名,主要是方便用類的成員符號 . 來代替指針的成員指向符號 ->。使代碼更直觀,書寫更方便。

?引用還常用于函數(shù)的參數(shù)傳遞。如:

void DoFunc(int &b) {b++; }// 注意:跟指針作下比較 void Dofunc(int *b) { *b++; }

?

轉載于:https://www.cnblogs.com/iSixth/p/4178962.html

總結

以上是生活随笔為你收集整理的备忘:C++基础 -- 数据类型的学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。