为什么输出不是0,1。为什么是0,2。?

时间:2020-07-26 11:32:36

标签: c function-pointers

#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个权利?

4 个答案:

答案 0 :(得分:1)

f内部,您为指针p分配了q pointer 值。

均值-在p = q;之后,pq指向同一个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的定义放在全局变量ij的定义之前。

这并不意味着在函数之后分配了全局变量。

int i = 0, j = 1;

是全局范围内的ij(带有立即初始化的声明)的定义,而不是赋值。

调用j2 f的值是正确的,因为:

    1. j通过引用传递给f,其地址已分配给指针参数q
    1. 指针q的值已分配给指针p
    1. p被取消引用,然后在调用者中指向j并将2分配给j

答案 3 :(得分:0)

发生了什么事

query.py -h
相关问题