为什么在C ++中2D和1D数组中auto在“范围为”中的工作方式不同

贾森·利亚姆(Jason Liam)

嗨,我正在使用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数组中未进行数组到指针的转换如果控制变量不是引用类型,它如何工作?即,为什么(如何)是pint类型,而不是int*在一维数组的情况下,同时如果我们的控制变量中省略参考符号然后它将成为一个int *,但是当我们在变量行的前面包含参考符号时,它将成为数组类型。为什么在行为上有这种差异?

贾森·利亚姆(Jason Liam)

情况1(行前没有参考符号

在外部循环中,行被初始化为ia的第一个元素,它本身就是一个数组,因此将进行数组到指针的转换,并且行将变为int *。因此,我们无法遍历int *。

情况2(行前带有参考符号

当我们在行中添加引用符号infont时,该数组到指针的转换将不再发生,并且row将保持为数组,并且我们知道我们可以遍历数组,因此这种情况将起作用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么* pointer_name在1D和2D数组中的行为不同

来自分类Dev

为什么初始化1D数组和2D数组以在React js中声明的行为不同

来自分类Dev

为什么“ *”在不同命令中的工作方式不同?

来自分类Dev

C ++ AMP中1D和2D数组上operator []的行为。

来自分类Dev

在C ++中通过引用传递1d和2d数组

来自分类Dev

为什么这些语句在JavaScript中的工作方式不同?

来自分类Dev

为什么Math.Round()在C#中的工作方式不同

来自分类Dev

在C ++中的2D数组中声明指向1D数组的指针

来自分类Dev

为什么在Java中if(Boolean.TRUE){...}和if(true){...}的工作方式不同

来自分类Dev

为什么此相关子查询在Oracle和SQL Server中的工作方式不同

来自分类Dev

为什么列表和字符串上的方法在python中的工作方式不同

来自分类Dev

为什么类型推断在 Java 中的 lambda 和方法引用上的工作方式不同?

来自分类Dev

从C中的2D数组中产生1D数组

来自分类Dev

在C中如何基于1D数组分配2D数组?

来自分类Dev

从C中现有的1D数组创建2D数组?

来自分类Dev

用1d char数组附加2d char数组(在C中)

来自分类Dev

C ++-1D中的动态数组有效,而2D中的动态数组无效

来自分类Dev

为什么while循环在Java和C中工作不同

来自分类Dev

为什么在Firefox,Chrome和IE中,这种方法的工作方式有所不同?

来自分类Dev

为什么在C中逐列复制2D数组要比逐行花费更长的时间?

来自分类Dev

为什么在C ++中声明动态2D数组时使用指针指向?

来自分类Dev

释放动态2D数组无法在C中按预期方式工作

来自分类Dev

为什么从Java 9中的Java 8确实String.replaceAll()工作方式不同?

来自分类Dev

为什么scala.beans.beanproperty在Spark中的工作方式有所不同

来自分类Dev

具有1个参数的C ++ 2D数组索引(为什么这样工作?)

来自分类Dev

具有1个参数的C ++ 2D数组索引(为什么这样工作?)

来自分类Dev

替换SIGUSR1信号处理程序在标准C11和GNU11中的工作方式不同

来自分类Dev

如何在c ++中以特定形式将内容从1d数组传输到2d数组?

来自分类Dev

在C ++中,2D数组在整体操作上是否比行为像2D数组的1D数组慢?

Related 相关文章

  1. 1

    为什么* pointer_name在1D和2D数组中的行为不同

  2. 2

    为什么初始化1D数组和2D数组以在React js中声明的行为不同

  3. 3

    为什么“ *”在不同命令中的工作方式不同?

  4. 4

    C ++ AMP中1D和2D数组上operator []的行为。

  5. 5

    在C ++中通过引用传递1d和2d数组

  6. 6

    为什么这些语句在JavaScript中的工作方式不同?

  7. 7

    为什么Math.Round()在C#中的工作方式不同

  8. 8

    在C ++中的2D数组中声明指向1D数组的指针

  9. 9

    为什么在Java中if(Boolean.TRUE){...}和if(true){...}的工作方式不同

  10. 10

    为什么此相关子查询在Oracle和SQL Server中的工作方式不同

  11. 11

    为什么列表和字符串上的方法在python中的工作方式不同

  12. 12

    为什么类型推断在 Java 中的 lambda 和方法引用上的工作方式不同?

  13. 13

    从C中的2D数组中产生1D数组

  14. 14

    在C中如何基于1D数组分配2D数组?

  15. 15

    从C中现有的1D数组创建2D数组?

  16. 16

    用1d char数组附加2d char数组(在C中)

  17. 17

    C ++-1D中的动态数组有效,而2D中的动态数组无效

  18. 18

    为什么while循环在Java和C中工作不同

  19. 19

    为什么在Firefox,Chrome和IE中,这种方法的工作方式有所不同?

  20. 20

    为什么在C中逐列复制2D数组要比逐行花费更长的时间?

  21. 21

    为什么在C ++中声明动态2D数组时使用指针指向?

  22. 22

    释放动态2D数组无法在C中按预期方式工作

  23. 23

    为什么从Java 9中的Java 8确实String.replaceAll()工作方式不同?

  24. 24

    为什么scala.beans.beanproperty在Spark中的工作方式有所不同

  25. 25

    具有1个参数的C ++ 2D数组索引(为什么这样工作?)

  26. 26

    具有1个参数的C ++ 2D数组索引(为什么这样工作?)

  27. 27

    替换SIGUSR1信号处理程序在标准C11和GNU11中的工作方式不同

  28. 28

    如何在c ++中以特定形式将内容从1d数组传输到2d数组?

  29. 29

    在C ++中,2D数组在整体操作上是否比行为像2D数组的1D数组慢?

热门标签

归档