嗨,我正在使用C ++中的2D和1D数组并使用range用于访问元素。我正在使用的代码如下:
对于2D阵列
int ia[3][4] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
for (auto& row : ia) {
for (auto col : row) {
cout << col << endl;
}
}
对于ID阵列
int base_array[2] = { 1, 2 };
for (auto p : base_array) {
std::cout << p << std::endl;
}
因此,正如我们在2D数组循环的外部范围中看到的那样,控制变量行必须是引用类型,这样就不会发生自动数组到指针的转换,并且我们可以遍历元素本身就是大小为4的数组。但是在1D数组中,我们并未将控制变量p用作参考类型,即使这样我们也能够遍历1D数组。我的问题是,为什么在1D数组中未进行数组到指针的转换?如果控制变量不是引用类型,它如何工作?即,为什么(如何)是p
的int
类型,而不是int*
在一维数组的情况下,同时如果我们的控制变量中省略参考符号行然后它将成为一个int *,但是当我们在变量行的前面包含参考符号时,它将成为数组类型。为什么在行为上有这种差异?
情况1(行前没有参考符号)
在外部循环中,行被初始化为ia的第一个元素,它本身就是一个数组,因此将进行数组到指针的转换,并且行将变为int *。因此,我们无法遍历int *。
情况2(行前带有参考符号)
当我们在行中添加引用符号infont时,该数组到指针的转换将不再发生,并且row将保持为数组,并且我们知道我们可以遍历数组,因此这种情况将起作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句