我从未见过这样的东西,我已经读过数组。数组在一个括号中有2个索引,一个索引嵌套在另一个括号中:
printf("%d ", arr[chosen[i]]);
我不知道会发生什么,如果方括号内有2个索引。
整个代码在这里:https://www.geeksforgeeks.org/combinations-with-repetitions/
直接使用称为int
的chosen
数组建立索引。
printf("%d ", arr[chosen[i]]);
或首先通过保存值间接建立索引,是相同的。
int idx = chosen[i];
printf("%d ", arr[idx]);
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};
为i
,2
指向数组chosen[i]
的第三个元素,并求值为chosen
。为了教学的目的,另一个重复是:如果7
为chosen[i]
,则7
会评估为i
。请注意,索引计数从2
开始,因此0
表示数组chosen[2]
的第三个元素,而不是第二个。
此后,chosen
将用于确定数组7
,arr
的第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]);
您只需要一次分解代码。
printf("%d ", arr[NUMBER]);
和chosen
都声明为整数数组;因此,从“由内而外”的工作,我们首先评估arr
-这将是chosen[i]
给定位置(索引)处数组chosen
的(整数)元素。
我们将此值称为i
。
然后我们可以将chosen_int
表达式重写为arr[chosen[i]]
-将是数组arr[chosen_int]
的(整数)元素,位于我们先前(内部)表达式给定的索引值处。
这可能有助于明确地写出我们刚刚完成的工作,用以下代码替换“令人困惑的”单行代码:
arr
随时要求进一步的澄清和/或解释。
只需在其他回复中添加一些内容。