#include<stdio.h>
void f(int *p, int *q) {
p = q;
*p = 2;
}
int i = 0, j = 1;
int main() {
f(&i, &j);
printf("%d %d n", i, j);
getchar();
return 0;
}
这里的输出如下: 0 2 即 i=0 和 j=2 因此 j 被修改但 i 没有被修改... 但根据我的说法,p 指向 i,q 指向 j。 之后,p开始指向q,所以i和j都应该修改吗?
最佳答案
首先将 i 和 j 的地址发送给函数 f (f(&i, &j)),这称为“按引用调用”,然后我们得到两个指针变量 (int *p, int q ) 存储 i 和 j 的地址。假设 i 的地址是 2048,j 的地址是 3048,例如 p=2048 和 q=3048。 之后,在函数中,我们将 q 存储到 p 中,这意味着现在 p 存储了地址 3048(j 的地址),这意味着 i 的地址丢失到该函数中并且无法对其进行更多修改,之后我们将值访问到 p 中,主函数中 j 的地址,并通过“value at”运算符 () 我们将其更改为 2。 毕竟 i=0 和 j=2。希望您理解并建议您阅读更多有关通过引用调用的信息。祝你好运!
关于c - 这个问题的正确输出是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58468096/