1.不可以使用auto关键字由初始值的列表推断类型
2.数组的元素应为对象,因此不存在引用的数组
3.复杂的数组声明,技巧:从数组的名字开始按照由内向外的顺序阅读
指针:a指向一个含有十个整数的数组
int b[10]={10,20,30}; int(*a)[10] = &b; cout << *((*a) + 1); //输出20
引用:a引用一个含有十个整数的数组
int b[10]={10,20,30}; int(&a)[10] = b; cout << a[1];
4.不存在引用的数组
int& a[10] = b;二、访问数组元素
1.数组元素也可以使用范围for语句来访问
2.数组下标通常定义为size_t类型,这是一种机器相关的无符号类型,在头文件 cstddef 定义
三、指针和数组1.指针也是迭代器,可以拥有和迭代器一样的 *** 作。c++11引入了begin和end函数,end函数指向尾元素的下一位置,这两个函数定义在iterator头文件内,使用如下:
int a[3] = { 10,20,30 }; int* l = begin(a); int* r = end(a);
2.和迭代器一样,两个指针相减的结果是距离,类型是ptrdiff_t与size_t类似,在头文件cstddef内,是一种带符号类型
3.负数下标,内置的下标运算符所用的索引值不是无符号型,标准库类型限定使用的下标必须是无符号型
int a[3] = { 10,20,30 }; int* p =& a[2]; int ee = p[-2]; //即a[0]四、与旧代码的接口
1.允许使用以空字符结束的字符数组(c风格)来初始化、赋值string对象
char s1[10] = "abcdef"; string s2 = s1;
2.string对象的加法运算(复合赋值运算)中允许以空字符结束的字符数组(c风格)作为其中一个运算对象
3.string提供一个名为c_str的成员函数,返回值是一个c风格的字符串,也就是返回一个指针,指向空字符结束的字符数组,指针类型是const char*
string s1("abcdef"); const char* str = s1.c_str();
4.允许使用数组来初始化vector对象,只需指明拷贝区域的首元素地址和尾后地址
int a[] = { 0,1,2,3,4,5 }; vectorv1(begin(a), end(a)); vector v2(a, a + 6);
5.尽量使用标准库类型而非数组
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)