【发布时间】:2012-02-20 16:01:36
【问题描述】:
我被要求在一次采访中给出以下代码的输出。
int a[] = {1,2,3,4,5};
int *p = &a + 1;
printf("%d, %d", *(a+1), *(p - 1));
我说我不能确定第二个的结果,所以面试失败了。
当我回到家,尝试编译代码时,g++会报错,而gcc只会给出警告。打印的结果是'2,5'。
有人知道为什么 C 和 C++ 编译器在这方面表现不同吗?
【问题讨论】:
-
报告的错误和警告是什么?
-
这是你的错字吗?因为 p 是未定义的。你的意思是说 p2 - 1?
-
C 和 C++ 是不同的语言。
-
这个问题确实有道理。不过里面可能有几个错别字。
-
哦,我以为问题是“为什么 C 和 C++ 编译器在这方面表现不同?”