数组
定义数组时必须指定数组类型,不允许用auto关键字由初始值的列表推断类型,另外和vector一样,数组元素应为对象,因此不存在引用的数组。
数组的定义和初始化
行如a[d],a是数组名字,d是维度,对维度的要求如下:
- 1 维度表示数组的元素个数,必须大于0
- 2 维度是属于数组类型的一部分,因此在编译是必须是已知的,必须是一个常量表达式。
字符数组的特殊性
对字符串字面值对数组初始化。当使用这种方式时,一定要注意字符串字面值的结尾处还有一个空字符,这个空字符也像字符串其他字符一样被拷贝到字符数组中。
不允许拷贝和赋值
不能将数组内容拷贝给其它数组作为初始值,也不能用数组为其它数组赋值。
数组的指针和数组的引用
从内向外,从右向左读
Int *ptrs[10]; //ptrs是含有10个整型数组的指针 (指针数组)
Int &refs[10] = ….; //错误,不存在引用的数组
Int (*Parry)[10] = &arr; //Parry指向一个含有10个整数的数组 (数组指针)
Int (&arrRef)[10] = arr //arrRef引用一个含有10个整数的数组 (数组引用)
()当需要遍历数组的所有元素时,最好的办法也是使用范围for语句。
指针和数组
数组有个特性,在很多用到数组名字的地方,编译器会自动将其替换为一个指向数组首元素的指针。
使用auto关键字和decltype关键字时的不同
int ia[] = {0,1,2,3,4,5,6,7,8,9};
auto ia2(ia) ; //ia2是一个整型指针,指向ia的第一个元素
decltype(ia) ia3 = {0,1,2,3,4,5,6,7,8,9}; //decltype(ia)返回类型是10个整数组成的数组
ia3[4] = i ; //把i的值赋给ia3的一个元素。
指针也是迭代器:使用下标运算符索引一个数组尾元素的下一位置
使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型。
允许使用数组初始化vector对象,只需指明拷贝区域的首元素地址和尾后地址就行。
俩个vector对象的比较 直接比较v1==v2
指针常量和常量指针
牢记const只对它左边的内容起作用,唯一的例外就是const本身是最左边的修饰符,那么它才会对右边的东西起作用。
指针常量
int * const a; //表示指针a是一个常量,初始化后不可更改,永远指向某个对象,但指向对象的值可以修改。
常量指针
const int * a;(等同于int const* a) //表示指针a所指的对象是常量,其值不可修改,但是指针a可以指向其它对象。
只要int 和 const相邻,可以随便进行调换,意义是一样的。
本文详细介绍了数组的定义、初始化及特殊性质,并深入探讨了数组与指针的关系,包括指针数组、数组指针和数组引用的区别。同时,还讲解了如何使用auto和decltype关键字处理数组,以及指针常量和常量指针的概念。
6679

被折叠的 条评论
为什么被折叠?



