c++第十七天
p101~p104:
1、数组中的元素个数也属于数组类型的一部分。
2、编译的时候数组的维度应该是已知的,也就是说维度必须是 const expression
3、const expression 是指值不会改变并且在编译过程就能得到计算结果的表达式。
4、不存在引用的数组,但是存在数组的引用。
5、在使用数组下标的时候,通常将其定义为 size_t类型。
6、数组所用的下标运算符是由 C++语言直接定义的。
7、编译器不会检查下标是否越界!
练习3.27
(a)非法。buf_size 不是一个常量表达式
(b)合法。
(c)当 txt_size()是 constexpr 时正确;否则错误
(d)非法。没有空间可存放空字符!
练习3.28
全局变量被初始化为 null或 0,
而局部变量的值是未定义的。
练习3.29
相比于 vector来说:
1)数组的初始化不灵活。(必须提供一个常量表达式)
2)数组的容量无法动态改变。
练习3.30
访问非法内存区域。元素ia[10]是未定义的,
int iap[10]仅定义了下标0到9的元素。
练习3.31
int main() { int arr[10]; for (int i = 0; i < 10; ++i) { arr[i] = i; } return 0; }
练习3.32
1
int main() { int arr[10]; for (int i = 0; i < 10; ++i) { arr[i] = i; } int arr2[10]; for (int i = 0; i < 10; ++i) { arr2[i] = arr[i]; } return 0; }
2
#include<vector> using std::vector; int main() { vector<int> ivec; for (int i = 0; i < 10; ++i) { ivec.push_back(i); } vector<int> ivec2 = ivec; // 参考p88 return 0; }
练习3.33
#include<iostream> using std::cin; int main() { unsigned scores[11]; unsigned grade; while (cin >> grade) { if (grade <= 100) { ++scores[grade/10]; } } for (auto x: scores) { std::cout << x << std::endl; } }
运行的结果就是
D:\labs>prog1 2 3 4 5 ^Z 4199108 4199104 0 4200976 6422240 6422296 6422476 1983763024 1362710793 4294967294 1983738842