c - 这个问题的正确输出是什么?

标签 c

#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/

相关文章:

c - C 中的指令返回什么?

从链表构建 BST 时崩溃

c - 进程间通信好像挂了

无法在 C 中为 png 创建结构

c - 打开文件实际上是做什么的?

c++ - 断言(0)是什么意思?

c - 在运行时永久转换 void 指针

c - 如何使用 execve 或 execvp 打印 $PATH

c - 当函数返回指针时,为什么我得到 "initialization makes pointer from integer"?

c - 意外的结果 c while