数组不允许直接用另一个数组赋值
数组内的元素不能是引用
关于复合类型+数组的声明:
加了括号的由内到外,由右到左读
// ptrs是大小为10的数组,数组内每个元素是int指针 int *ptrs[10]; // array是引用,引用的对象是大小为10的数组,数组内每个元素是int指针 int *(&array) [10] = ptrs;
指针和数组
对于一个数组变量,auto 与 decltype的行为差异:
- 把数组变量赋给auto,其类型会变成指向第一个元素的指针
- decltype(数组) 的结果是 同数组大小的数组类型
int ia[] = {0, 1, 2}; auto ia2(ia); // int* ia2[1] = 2; decltype(ia) ia3 = {0, 1, 3}; // int[3] ia3[3] = 3; // warning:超索引了
获取首元素和尾后指针:begin和end函数
两个指针相减的结果是
ptrdiff_t(long long),值为俩指针的地址差 / sizeof(指针的原始类型)不同类型的指针之间不能使用比较运算符,也不能做算术运算
int* beg = std::begin(ia); // 第一个元素的指针 int* end = std::end(ia); // 末尾的下一个元素指针 ptrdiff_t n = std::end(ia) - std::begin(ia); // n = 3, ptrdiff_t定义在cstddef里,带符号