关于数组的C概念

时间:2014-01-09 16:28:46

标签: c arrays output

int main(){

    int arr[2]={30,40};
    printf("%dn",i[arr]);
    return 0;
}

我在检查中发现了这个问题,给出的解决方案是 40

但我认为它应该给出错误,因为我未定义。 或者,可能是我遗失了一些东西。 请解释我40是正确的答案?

提前致谢。

5 个答案:

答案 0 :(得分:6)

你是对的,代码错了。可能,这是一个拼写错误,目的是定义i或使用1[arr]

答案 1 :(得分:3)

可能是错误,因为i未定义。

此外,练习的目的可能是利用以下事实:在 C 中,您可以编写v[ i ]以访问# i 向量 v 的元素,或i[ v ]

两个表单都是等效的。由于v[ i ]被翻译为*( v + i ),因此*( i + v )i[ v ]之间实际上没有任何区别,这是1[arr]的翻译版本。这不是常用的,但仍然有效。

Arrays in C, from Wikipedia

在此特定示例中,{{1}}将返回预期答案。

我只是想知道为什么他们选择40而不是42。

希望这有帮助。

答案 2 :(得分:2)

在C array[index] = *(array + index) = *(index + array) = index[array]。假设i1(否则行为未定义),1[arr]相当于arr[1],其中包含值40

答案 3 :(得分:2)

i可能被认为是1,无论是在考试的口头部分,还是在缺失的部分。如上所述,问题当然不适用,因为它不能编译。

问题的真正意义在于测试申请人是否理解array[index]等同于index[array]和(推测)原因。

答案 4 :(得分:0)

嗯,让我们看看我们......

matilda:~ jeremyp$ cat > foo.c
int main(){

    int arr[2]={30,40};
    printf("%dn",i[arr]);
    return 0;
}
matilda:~ jeremyp$ cc foo.c
foo.c:4:5: warning: implicitly declaring library function 'printf' with type 'int (const char *, ...)'
    printf("%dn",i[arr]);
    ^
foo.c:4:5: note: please include the header <stdio.h> or explicitly provide a declaration for 'printf'
foo.c:4:18: error: use of undeclared identifier 'i'
    printf("%dn",i[arr]);
                 ^
1 warning and 1 error generated.

是的确,i未定义。你需要

int i = 1;

在该声明之前或它不是i,它是1。我们试试吧......

matilda:~ jeremyp$ cat >foo.c
#include <stdio.h> // Stops the warning
int main(){

    int arr[2]={30,40};
    printf("%d\n",1[arr]); // Also added a \ so we get a line feed.
    return 0;
}
matilda:~ jeremyp$ cc foo.c
matilda:~ jeremyp$ ./a.out
40

现在有效。