【问题标题】:What does the array subscripting operator ([ ]) do to an array?数组下标运算符 ([ ]) 对数组有什么作用?
【发布时间】:2019-10-14 19:49:39
【问题描述】:

我想知道数组下标运算符 ([]) 对对象做了什么

this questionthis question 中,我了解到[] 运算符获取对象的地址,将括号之间的任何内容添加到对象中,最后取消引用总和以获得地址。但是,在数组声明中,例如。

int iarr[] = {1,2};
int iarr2[2] = {1,2};

[] 运算符似乎没有将括号中的值添加到操作数中,尤其是在第二个示例中。相反,它似乎赋予了对象存储数组的能力。

另外,我的猜测是在int arr2[2] = {1,2} 中,arr[2] 将为两个ints 分配内存。真的吗?

总结一下:

[] 运算符在声明期间对其操作数做了什么?它只是赋予对象存储数组的能力,还是为数组分配内存?

【问题讨论】:

  • [] 的含义取决于上下文,但在您的情况下它不是运算符。这是声明或初始化数组的语法。
  • 请记住,C++ 使用Context-sensitive grammar。相同的符号在不同的上下文中通常意味着不同的事物。

标签: c++ arrays


【解决方案1】:

[] 仅在应用于表达式时才是运算符。
&* 的原理相同。)

在声明中,它是类型的一部分,除了指定声明的变量是一个数组之外,并没有真正“做”任何事情。

【讨论】:

    【解决方案2】:

    您混淆了[] 运算符和声明数组的语法。

    int iarr2[2] = {1,2};
    

    正在声明一个名为 iarr2 的 2 个整数的数组,然后将数组的元素初始化为 1 和 2。它不是应用 [] 运算符。

    【讨论】:

      【解决方案3】:

      这个:

      int iarr[] = {1,2};
      

      表示定义一个数组,该数组的大小将与初始化列表中的元素数量相当。

      另一方面:

       int iarr2[2] = {1,2};
      

      表示定义一个二元数组并将其初始化为12

      你也可以这样做:

       int iarr2[4] = {1,2};
      

      表示定义一个四元素数组并将前两个元素初始化为12。剩余元素初始化为:0

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-25
        • 1970-01-01
        • 2012-04-15
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        相关资源
        最近更新 更多