数组的单个括号中的嵌套索引

问题描述 投票:2回答:4

我从未见过这样的东西,我已经读过数组。数组在一个括号中有2个索引,一个索引嵌套在另一个括号中:

printf("%d ", arr[chosen[i]]); 

我不知道会发生什么,如果方括号内有2个索引。

整个代码在这里:https://www.geeksforgeeks.org/combinations-with-repetitions/

c arrays indices
4个回答
2
投票

直接使用称为intchosen数组建立索引。

printf("%d ", arr[chosen[i]]); 

或首先通过保存值间接建立索引,是相同的。

int idx = chosen[i];
printf("%d ", arr[idx]); 

1
投票
printf("%d ", arr[chosen[i]]);

chosen[i]计算得出的值存储在([​​C0])处。数组i + 1的元素。

但是我需要更多数据来说明这种情况。因此,假设以下初始化:

chosen

假设int i = 2; int chosen[4] = {1,5,7,9} int arr[9] = {6,2,7,23,9,16,11,44,2}; i2指向数组chosen[i]的第三个元素,并求值为chosen。为了教学的目的,另一个重复是:如果7chosen[i],则7会评估为i。请注意,索引计数从2开始,因此0表示数组chosen[2]的第三个元素,而不是第二个。

此后,chosen将用于确定数组7arr的第8个元素;a[7]= a[7]的第8个元素。

arr内部,我们有a[7]的值。因此,我们最终通过以下方式打印44

44

所以,

printf("%d ", arr[chosen[i]]);

在我们的示例中等于:

printf("%d ", arr[chosen[i]]); 

再次展示这种关系:

printf("%d ", arr[7]);

相当于

chosen[i] = NUMBER;
buffer = chosen[i];
printf("%d ", arr[buffer]);

也等同于

buffer = NUMBER;
printf("%d ", arr[buffer]);

当然也等同于:

count[i] = NUMBER;
printf("%d ", arr[count[i]);

0
投票

您只需要一次分解代码。

printf("%d ", arr[NUMBER]); chosen都声明为整数数组;因此,从“由内而外”的工作,我们首先评估arr-这将是chosen[i]给定位置(索引)处数组chosen的(整数)元素。

我们将此值称为i

然后我们可以将chosen_int表达式重写为arr[chosen[i]]-将是数组arr[chosen_int]的(整数)元素,位于我们先前(内部)表达式给定的索引值处。

这可能有助于明确地写出我们刚刚完成的工作,用以下代码替换“令人困惑的”单行代码:

arr

随时要求进一步的澄清和/或解释。


0
投票

只需在其他回复中添加一些内容。

© www.soinside.com 2019 - 2024. All rights reserved.