我在练习测试中被问到这个问题,没有发布答案。我无法测试代码,但它让我感到困惑。您能否帮助我不仅理解答案,而且理解为什么。
int foo() {
int a = 1;
char b[] = "zapples";
a = *(b + 1);
if (a == 'a') return 1;
else return 0;
}
What does foo return? ____
我在练习测试中被问到这个问题,没有发布答案。我无法测试代码,但它让我感到困惑。您能否帮助我不仅理解答案,而且理解为什么。
int foo() {
int a = 1;
char b[] = "zapples";
a = *(b + 1);
if (a == 'a') return 1;
else return 0;
}
What does foo return? ____
他们教过你 C 指针是如何工作的吗?
我不会给你一个直接的答案,但请考虑一下:
b
具有字符串“zapples”的起始地址。这意味着b[0]
指向“z”。另一种表示法是*(b + 0)
,即“地址 中包含的值b
,偏移量为0
)。有了这些信息, 的值是*(b + 1)
多少?
这应该足以解决练习。
它将返回 1。
线a = *(b + 1)
是重要的。它将 b 作为指向数组中第一个元素的指针并添加一个以指向第二个元素。然后将其取消引用,以便将该地址 'a' 处的值分配给变量a
。