你能解释一下为什么输出是 3
吗?
我试图追踪答案,结果显示该行
i+=(a==b?1:0)
给出 1
,但 fun1()
不传递按值 所以 q
和 p
被复制到不同的变量?
int fun1(int* a, int* b)
{
int i = 0;
i += (&a == &b ? 1 : 0);
i += (a == b ? 1 : 0);
i += (*a == *b ? 1 : 0);
return i;
}
int fun2(int** a, int* b)
{
int i = 0;
i += (a == &b ? 1 : 0);
i += (*a == b ? 1 : 0);
return i;
}
int main(void)
{
int i = 0;
int* p = &i;
int* q = &i;
printf("%d\n", fun1(p, q) + fun2(&p, q));
return 0;
}
最佳答案
在 fun1
中:
(&a==&b?1:0)
这给出
0
。它们是fun1
的两个不同参数,基本上是两个不同的局部变量,因此它们不能具有相同的地址。(a==b?1:0)
这给出
1
。这些值都是来自main
的&i
。(*a==*b?1:0)
这给出
1
。由于a
和b
相等,因此它们指向同一事物。
在 fun2
中:
(a==&b?1:0)
这给出
0
。a
和b
都是参数,所以a
不能等于b
的地址(事实上,它等于来自 main 的&p
。(*a==b?1:0)
这给出
1
。a
等于来自main的&p
,所以*a
等于来自main的p
,即&i
从主要。b
等于来自 main 的q
,这又是来自 main 的&i
。
因此总数是 3
。
关于c - 按值和指针传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35020545/