我从未见过这样的情况,即使我已经读过有关数组的内容。数组在方括号中有2个索引,其中一个嵌套在另一个方括号中:
printf("%d ", arr[chosen[i]]);
如果方括号内有两个索引,我不知道会发生什么。
完整代码在这里:https://www.geeksforgeeks.org/combinations-with-repetitions/
我从未见过这样的情况,即使我已经读过有关数组的内容。数组在方括号中有2个索引,其中一个嵌套在另一个方括号中:
printf("%d ", arr[chosen[i]]);
如果方括号内有两个索引,我不知道会发生什么。
完整代码在这里:https://www.geeksforgeeks.org/combinations-with-repetitions/
通过使用名为 chosen
的 int
数组直接索引。
printf("%d ", arr[chosen[i]]);
或者通过先保存值来间接地进行索引也是一样的。
int idx = chosen[i];
printf("%d ", arr[idx]);
printf("%d ", arr[chosen[i]]);
chosen[i]
计算的是数组 chosen
的第 (i + 1
) 个元素存储的值。
但我需要更多数据来说明这个情况。因此,让我们假设以下初始化:
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]
在i
为2
时被评估为7
。请注意,索引计数从0
开始,因此chosen[2]
表示数组chosen
的第三个元素,而不是第二个。
之后,7
将用于确定数组arr
的第八个元素,a[7]
;a[7]
= 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
中给定位置(索引)的元素(整数)。chosen_int
。arr[chosen[i]]
重新编写为 arr[chosen_int]
- 这将是数组 arr
中给定索引值的元素(整数),由我们以前的(内部)表达式给出。int chosen_int = chosen[i];
printf("%d ", arr[chosen_int]);
欢迎进一步询问和/或解释。
只是想在其他回复中补充一些内容。
我从未见过这样的东西...
printf("%d ", arr[chosen[i]]);
对我来说,这听起来非常奇怪,但它确实可能发生。
实际上没有什么奇怪的地方:如果你思考一下,就不会有歧义。一个括号对包含一个索引;该索引再次用数组表示法表示。
这可能对于改变庞大数组的顺序很有用。假设你有一个包含长结构体的数组。要对其进行排序,您应该交换大对象。但是,您可以通过交换其索引而不是对象本身来对其进行排序。或者,您可能希望能够在内存中维护不同的有序列表,所有这些列表都包含指向同一数组的索引。