int main(){

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

我在一次考试中发现了这个问题,给出的解决方案是 40

但我认为它应该给出一个错误,因为我是未定义的。或者,可能是我错过了什么。请解释我如何40是正确的答案?

先谢谢你。

有帮助吗?

解决方案

你是正确的,代码是错误的。很可能,这是一个错字,其目的是要么定义 i 或使用 1[arr].

其他提示

可能这是一个错误,因为 i 没有定义。

此外,这项工作的目的可能是利用以下事实: C, ,你可以写 v[ i ] 为了访问 #i 向量的元素 v, ,或 i[ v ].

这两种形式是等价的。自 v[ i ] 被翻译为 *( v + i ), ,实际上与之没有任何区别 *( i + v ), ,这是什么 i[ v ] 被翻译为。这不是一个常见的用途,但仍然是有效的。

C中的数组,来自维基百科

在这个具体的例子中, 1[arr] 会返回预期的答案。

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

希望这有帮助。

i 可能应该在考试的口语部分,或者在缺少的部分给出1。正如所写的,这个问题当然是不适用的,因为它没有编译。

问题的真正意义在于测试申请人是否理解 array[index] 相当于 index[array] 和(大概)为什么。

在C array[index] = *(array + index) = *(index + array) = index[array].假设 i 要成为 1 (否则行为未定义), 1[arr] 相当于 arr[1] 它包含了价值 40.

嗯,让我们看看。..

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

现在管用了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top