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

时间:2019-10-19 21:19:53

标签: 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被修改,但我不被修改。 但是根据我的说法,p指向i,q指向j。 之后,p开始指向q,因此i和j都应该修改?

1 个答案:

答案 0 :(得分:-1)

首先将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的地址,并通过“运算符”处的“值”()将其更改为2。 现在,所有i = 0和j = 2。希望您理解并建议您阅读更多有关通过参考致电的信息。祝你好运!