【发布时间】:2016-08-26 15:55:37
【问题描述】:
我正在尝试学习 C++,但我无法在这里完全理解这段代码,尽管我花了很多时间寻找答案:
#include <iostream>
void printArray1(int (&array)[3]) {
for(int x : array)
std::cout << x << " ";
}
void printArray2(int array[]) {
for(int x : array) // compiler error, can't find begin and end
std::cout << x << " ";
}
int main() {
int a[3] = {34,12,88};
for(int x : a)
std::cout << x << " ";
std::cout << std::endl;
printArray1(a);
printArray2(a);
std::cout << std::endl;
return 0;
}
在 printArray1 中,我们接收到一个参数,该参数是对大小为 3 的数组的引用。这是否意味着我们正在接收整个数组的地址,或者我们只是接收到大小数组中第一个元素的地址3?还有,这个参数是怎么传给循环的呢?
在 printArray2 中,我们接收到指向数组中第一个元素的指针,对吗?换句话说,我们也收到了一个地址,就像在 printArray1 中一样?因此,这个函数中基于范围的 for 循环不会编译,因为我们没有数组的大小数据,对吧?
最后,当我们尝试在 main 中使用基于范围的 for 循环进行打印时,我们传递给循环的到底是什么?这里是不是指向数组第一个元素的指针,如果是,为什么printArray2中的for循环不接受指针,为什么会编译?
我对C++的理解还是比较初级的,非常感谢大家的帮助,谢谢!
【问题讨论】:
-
您自己通过调试程序看到了吗?它打印什么?
标签: c++ arrays parameter-passing ranged-loops