我正在看一篇我在大学里学习的课程的过去论文,而且总是有关于C指针的问题。C指针过去的文章
我想我有他们是如何工作的合理把握,然而,这是困惑我的问题是:
Consider running the C program fragment:
int x[4] = {0,2,4,6};
int *y;
y = &x[2];
*(x + 2) = y[1] + 1;
What is the value of the expression *y afterwards?
(a) 2
(b) 4
(c) 5
(d) 7
(e) 8
现在,在回答对上述问题,它说,答案是d
。
我超级困惑,看到:
- x的值没有声明,所以我还以为这将是无法评估
x+2
y
不是一个数组,那么如何评估y[1]
?
为什么7
这里是正确答案?
*(x + 2)和x [2]是编译器相同。 y [1]与*(y + 1)相同。由于y与x + 2的内存位置相同,(x + 2)+1指向6或x [3]。添加一个到它变成7.并且它分配给x [2],其中y指向 – jcjunction 2014-12-05 17:59:21
击败我。好的解释@jcjunction! – 2014-12-05 17:59:58