黑龙江快乐十分

C++ Primer ch3 指针和数组

2/22/2017来源:ASP.NET技巧人气:18272

1. shiyongshuzudeshihou,bianyiqiyibanhuibatazhuanhuanchengzhizhen。

2. autoyudecltypezaifenxishuzuleixingshidequbie:

int a[] = { 1,2,3 }; auto b = a; // 得到的是指针类型int (*p)[3] decltype(a) c; // 得到的是数组类型int [3]

黑龙江快乐十分3. c++11biaozhunkuhanshubegin()heend()

接受数组作为参数 定义在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. zhizhenxiangjiandedaodejieguoleixingshimingweiptrdiff_tdebiaozhunkuleixing。

5. cunzaishuzu int a[] = {1 , 2 , 3 , 4 , 5}; dangnishiyongxiabiaoduishuzuyuansujinxingsuijifangwendeshihou(birufangwena[2]),qishijinxingdeshizheiyangdecaozuo:

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

黑龙江快乐十分yicidechu,zhiyaozhizhenzhixiangdeshishuzuzhongdeyuansu,doukeyizhixingxiabiaoyunsuan:

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++biaozhunkuyujiudaimadejiekou

// c_str()函数:将string类转换为C风格的字符串 string s = "Hello World!"; const char *s_elder = s.c_str(); //将内置数组的内容复制到vector int a[] = { 0,1,2,3,4,5 }; vector<int> v(begin(a), end(a));

7. guanyuduoweishuzu

int a[3][4]; int(&row)[4] = a[1];// 将row绑定到a的第二个4元素数组上

row是行,col是列

shiyongc++ 11fanweiforyujuchuliduoweishuzu

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){}

zhaizic++ imer:

程序将无法通过编译。这是因为,像之前一样的第一个循环遍历a的所有元素,注意元素实际上是大小为4的数组。因为row不是引用类型,所以编译器初始化row时会自动将这些数组形式的元素转换成指向该数组内首元素的指针。这样得到的row的类型就是int * ,显然内层的循环就不合法了,编译器将试图在一个int * 内遍历,这显然和程序的初衷相去甚远。



优质网站模板

  • 1
  • 2
  • 3