是否可以在C中创建一个使用另一个数组作为索引的下标数组。我浏览了一个链接:IDL — Using Arrays as Subscripts
数组可以用作其他数组的下标。下标数组中的每个元素都选择下标数组中的元素。
再举一个例子,考虑一下这些陈述:
A = [6, 5, 1, 8, 4, 3]
B = [0, 2, 4, 1]
C = A[B]
PRINT, C
这会产生以下输出:
6 1 4 5
上述C编程是否可行。
答案 0 :(得分:4)
数组可以用作其他数组的下标。下标数组中的每个元素都选择下标数组中的元素。
从语法上讲,这在C中是不可能的。你可以使用循环来实现这一点。
int a[] = {6, 5, 1, 8, 4, 3};
int b[] = {0, 2, 4, 1};
for (int i = 0; i < (sizeof(b)/sizeof(b[0])); ++i)
printf("%d\n", a[b[i]]);
如果你真的希望它看起来整洁,那么将它包装在一个函数中你应该没问题:
// returns the no. of elements printed
// returns -1 when index is out of bounds
int print_array(int *a, int *b, size_t na, size_t nb)
{
int i = 0;
for (i = 0; i < nb; ++i)
{
int const index = b[i];
if (index >= na)
return -1;
print("%d\n", a[index]);
}
return i;
}
答案 1 :(得分:1)
C中的数组索引运算符只能接受整数参数。这是因为编译器会将操作(如A[0]
)扩展为基本添加和解除引用。因此,您不能将数组作为操作数传递,以从原始数组中提取多个索引。
请注意,A[0]
与*A
相同,A[1]
与*(A + 1)
等相同。
答案 2 :(得分:0)
是的,当然是:
int a[6] = { 6, 5, 1, 8, 4, 3 };
int b[4] = { 0, 2, 4, 1 };
printf("\na[b[0]]=%d", a[b[0]]);
printf("\na[b[1]]=%d", a[b[1]]);
printf("\na[b[2]]=%d", a[b[2]]);
printf("\na[b[3]]=%d", a[b[3]]);
输出:
a[b[0]]=6 a[b[1]]=1 a[b[2]]=4 a[b[3]]=5
答案 3 :(得分:0)
不,那是不可能的! 在C中,数组运算符[x]只是指针添加的简写。 所以a [x]与(a + x)*相同 这意味着数组运算符的唯一有效参数是Integers。