-1

我在练习测试中被问到这个问题,没有发布答案。我无法测试代码,但它让我感到困惑。您能否帮助我不仅理解答案,而且理解为什么。

int foo() {
    int a = 1;
    char b[] = "zapples";
    a = *(b + 1);
    if (a == 'a') return 1;
    else return 0;
}
What does foo return? ____ 
4

2 回答 2

1

他们教过你 C 指针是如何工作的吗?

我不会给你一个直接的答案,但请考虑一下:

b具有字符串“zapples”的起始地址。这意味着b[0]指向“z”。另一种表示法是*(b + 0),即“地址 中包含的值b,偏移量为0)。有了这些信息, 的值是*(b + 1)多少?

这应该足以解决练习。

于 2012-04-29T17:45:24.880 回答
0

它将返回 1。

线a = *(b + 1)是重要的。它将 b 作为指向数组中第一个元素的指针并添加一个以指向第二个元素。然后将其取消引用,以便将该地址 'a' 处的值分配给变量a

于 2012-04-29T17:45:25.410 回答