02. 你不可以存取超过阵列既定范围的空间
错误例子:
int str[5];
for (int i = 0 ; i <= 5 ; i++) str[i] = i;
正确例子:
int str[5];
for (int i = 0; i < 5; i++) str[i] = i;
说明:宣告阵列时,所给的阵列元素个数值如果是 N, 那么我们在后面
透过 [索引值] 存取其元素时,所能使用的索引值范围是从 0 到 N-1
C/C++ 为了执行效率,并不会自动检查阵列索引值是否超过阵列边界,
我们要自己来确保不会越界。一旦越界,操作的不再是合法的空间,
将导致无法预期的后果。
备注:
C++11之后可以用Range-based for loop提取array、
vector(或是其他有提供正确.begin()和.end()的class)内的元素
可以确保提取的元素一定落在正确范围内。
例:
// vector
std::vector<int> v = {0, 1, 2, 3, 4, 5};
for(const int &i : v) // access by const reference
std::cout << i << ' ';
std::cout << '\n';
// array
int a[] = {0, 1, 2, 3, 4, 5};
for(int n: a) // the initializer may be an array
std::cout << n << ' ';
std::cout << '\n';
补充资料:
http://en.cppreference.com/w/cpp/language/range-for