【问题标题】:Increment of array inside array in CC中数组内数组的增量
【发布时间】:2020-12-24 05:17:13
【问题描述】:
#include <stdio.h>

#define NUMBER 20                                         

#define OPTION 6 

void main ()
{

    int optionList[NUMBER]= 
        {4,4,5,2,1,3,1,0,4,3,3,1,2,5,4,2,3,4,3,1}; 

    int count[OPTION] = { 0 } ;

    for (int i = 0; i <= NUMBER-1; i++) 
        ++count[optionList[i]]; 
} 

我不明白 ++count[optionList[i]]。它是数组'count'和'optionList'的循环增量吗?它是如何工作的?

【问题讨论】:

  • 分解:int x = optionList[i],然后是++count[x] 本质上optionList在这里用作将值0...19映射到0...5的查找表
  • OT:您可以使用i &lt; NUMBER,而不是使用循环条件i &lt;= NUMBER-1。后者比较常见,所以更多的人会立即认出它并理解它,并且写的更少。
  • 这条语句++count[optionList[i]]; 增加了count 数组中的值。它根本不是一个“循环增量”——i++ 是一个循环增量。另外:main 不是void——它意味着返回一个int
  • 关于:void main () 不管不符合的编译器可能允许什么,main() 只有两个有效签名,它们是:int main( void )int main( int argc, char *argv[] )

标签: arrays c increment


【解决方案1】:

optionList - 是一个包含 20 个元素的数组
count - 是一个包含 6 个元素的数组

for 循环遍历i = 0 以包含i = 20 - 1 = 19
在每个迭代步骤中,它都会执行++count[optionList[i]];

让我们逐步计算 i=3 的++count[optionList[i]];: 首先我们看optionList[i],所以我们从optionList 中取出第i 个元素。 optionList 中的第三个元素(从 0 开始计数)是 2。 所以++count[optionList[i]] 计算为++count[2]++value 表示将value 后面的值加一。 ++count[2] 表示count 的第二个元素加一。所以在执行++count[optionList[i]]; 之后,数组count 现在看起来像这样:{0, 0, 1, 0, 0, 0}(如果之前看起来像这样{0, 0, 0, 0, 0, 0}

结论

optionList 视为一个索引数组。 循环在optionList 的每个索引处递增count

【讨论】:

    【解决方案2】:

    如果您以“由内而外”的方式考虑这一点,optionList[i] 将首先得到评估。这将返回 optionList[i] 处的值

    例如)如果i = 0optionList[i] = 4

    然后count[{value}] 被评估。

    例如)如果i = 0optionList[i] = 4。在这种情况下,count[optionList[i]]count[4] 相同。

    因此count 数组中的第四个位置会增加前缀++。循环实质上是遍历并在optionList[i] 指定的每个位置处递增count 数组的值。

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 1970-01-01
      • 2018-07-28
      • 2013-10-08
      • 2021-10-31
      • 1970-01-01
      • 2016-03-18
      • 2019-06-15
      • 1970-01-01
      相关资源
      最近更新 更多