国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ Primer ch3 指針和數組

2019-11-08 02:22:10
字體:
來源:轉載
供稿:網友

1. 使用數組的時候,編譯器一般會把它轉換成指針。

2. auto與decltype在分析數組類型時的區別:

int a[] = { 1,2,3 };auto b = a; // 得到的是指針類型int (*p)[3]decltype(a) c; // 得到的是數組類型int [3]

3. C++11標準庫函數begin()和end()

接受數組作為參數 定義在iterator頭文件中 end()返回的是不存在的尾后指針 int a[] = { 1,2,3 };int *pB = begin(a);int *pE = end(a);// 利用begin和end遍歷數組for (auto p = pB; p != pE; ++p) { cout << *p << ' ';}

4. 指針相減得到的結果類型是名為ptrdiff_t的標準庫類型。

5. 存在數組 int a[] = {1 , 2 , 3 , 4 , 5}; 當你使用下標對數組元素進行隨機訪問的時候(比如訪問a[2]),其實進行的是這樣的操作:

int *p = a;int val = *(p + 2);

以此得出,只要指針指向的是數組中的元素,都可以執行下標運算:

int a[] = { 1,2,3,4,5 };int *p = &a[2];int j = p[1]; // j為a[2+1]int k = p[-2]; // k為a[2-2]

6. C++標準庫與舊代碼的接口

// c_str()函數:將string類轉換為C風格的字符串string s = "Hello World!";const char *s_elder = s.c_str();//將內置數組的內容復制到vectorint a[] = { 0,1,2,3,4,5 };vector<int> v(begin(a), end(a));

7. 關于多維數組

int a[3][4];int(&row)[4] = a[1];// 將row綁定到a的第二個4元素數組上

row是行,col是列

使用C++ 11范圍for語句處理多維數組

int a[3][4];int ct = 1;for (auto &row : a) { for (auto &col : row) { col = ct++; }}

注意,無論是否進行讀寫操作,必須將外層循環的控制變量聲明成引用類型,這是避免數組被自動轉換為指針。 假如循環寫成如下格式:

for(auto row : a) for(auto col : row){}

摘自C++ PRimer:

程序將無法通過編譯。這是因為,像之前一樣的第一個循環遍歷a的所有元素,注意元素實際上是大小為4的數組。因為row不是引用類型,所以編譯器初始化row時會自動將這些數組形式的元素轉換成指向該數組內首元素的指針。這樣得到的row的類型就是int * ,顯然內層的循環就不合法了,編譯器將試圖在一個int * 內遍歷,這顯然和程序的初衷相去甚遠。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 郎溪县| 黑龙江省| 东乌| 宁河县| 仙游县| 黔西县| 纳雍县| 临澧县| 昌图县| 盐池县| 普格县| 玉林市| 余姚市| 富裕县| 呈贡县| 桂东县| 上思县| 诸城市| 历史| 大渡口区| 罗山县| 和硕县| 汨罗市| 马龙县| 瑞丽市| 鸡西市| 嘉荫县| 鹤壁市| 萨嘎县| 夏河县| 聂荣县| 上杭县| 饶河县| 石棉县| 夏津县| 皮山县| 虎林市| 武安市| 平泉县| 镇平县| 扶绥县|