int main(){
int arr[2]={30,40};
printf("%dn",i[arr]);
return 0;
}
我在检查中发现了这个问题,给出的解决方案是 40
但我认为它应该给出错误,因为我未定义。 或者,可能是我遗失了一些东西。 请解释我40是正确的答案?
提前致谢。
答案 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]
的翻译版本。这不是常用的,但仍然有效。
在此特定示例中,{{1}}将返回预期答案。
我只是想知道为什么他们选择40而不是42。
希望这有帮助。
答案 2 :(得分:2)
在C array[index] = *(array + index) = *(index + array) = index[array]
。假设i
为1
(否则行为未定义),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
现在有效。