C

时间:2015-07-08 07:05:58

标签: c arrays

是否可以在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编程是否可行。

4 个答案:

答案 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。