//我们如何使用下标 a[i] 访问数组
a[i]
和 是一样的*(a + i)
。
就像现在一样,您print
将仅适用于精确大小为 3 的数组,因此:
- 如果数组恰好有超过 3 个元素,则某些元素将不会被打印。
- 如果它恰好小于 3,您将访问数组后面的内存中的任何内容,这是未定义的行为(翻译:非常糟糕!)。
当您将数组传递给函数时,数组的大小会被“遗忘”,因此要么显式传递大小以使函数可重用所有大小的数组(可重用性毕竟是拥有函数的关键!)...
void print(int const* a, size_t a_size) {
for (size_t i = 0; i < a_size; ++i) // size_t is the appropriate type here, not int.
std::cout << a[i] << std::endl; // Use std::endl to be able to discern where teh current number ends and the next starts!
}
// ...
int arr[3] = {1, 2, 3};
const size_t arr_size = sizeof(arr) / sizeof(arr[0]);
print(arr, arr_size);
...或以 C++ 方式执行并使用std::vector
...
void print(const std::vector<int>& a) {
for (const auto& s : a) // The new C++11 "for each" syntax.
std::cout << s << std::endl;
}
// ...
std::vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
print(a);
...甚至使它通用...
template <typename T>
void print(const std::vector<T>& a) {
for (const auto& s : a)
std::cout << s << std::endl;
}