#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,为什么不显示0,1,因为* p = 2之后j的值被分配了1个权利?
答案 0 :(得分:1)
在f
内部,您为指针p
分配了q
的 pointer 值。
均值-在p = q;
之后,p
和q
指向同一个int,即j
。
这就是为什么您得到0.2的原因。
答案 1 :(得分:0)
“在*p=2
之后,j
的值被赋予1
吗?”
否,函数f()
在右括号}
处结束,并且
在j
开始之前为1
分配了main()
的值。
行
int i = 0, j = 1;
同样可以在功能f()
之前更进一步。
答案 2 :(得分:0)
“因为在
*p = 2;
之后j
的值是由1
分配的?”
不。在控制流和范围方面,您似乎在这里很难理解。 f
的定义放在全局变量i
和j
的定义之前。
这并不意味着在函数之后分配了全局变量。
int i = 0, j = 1;
是全局范围内的i
和j
(带有立即初始化的声明)的定义,而不是赋值。
调用j
后2
f
的值是正确的,因为:
j
通过引用传递给f
,其地址已分配给指针参数q
。q
的值已分配给指针p
。p
被取消引用,然后在调用者中指向j
并将2
分配给j
。答案 3 :(得分:0)
发生了什么事
query.py -h