为什么输出不是0,1。为什么它是0,2。? #包括 空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(); 返回0; }
这个代码打印0,2,为什么它不打印0,1,因为在*p=2之后,j的值被分配到了1个右边?有谁能帮我在为什么输出不是0,1。为什么它是0,2。? #包括 空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(); 返回0; },c,function-pointers,C,Function Pointers,这个代码打印0,2,为什么它不打印0,1,因为在*p=2之后,j的值被分配到了1个右边?有谁能帮我在f里面p你正在分配q的指针值 平均值-在p=q之后,p和q都指向同一个int,即j 这就是为什么会得到0,2。“在*p=2之后,j的值被赋值1对吗?” 否,函数f()在结束处结束}大括号,并且 j在main()开始之前被分配了1的值 线路 #include<stdio.h> void f(int *p, int *q) { p = q; *p = 2; } int
f
里面p
你正在分配q
的指针值
平均值-在p=q之后
,p和q都指向同一个int,即j
这就是为什么会得到0,2。“在*p=2
之后,j
的值被赋值1
对吗?”
否,函数f()
在结束处结束}
大括号,并且j
在main()
开始之前被分配了1
的值
线路
#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;
}
在函数f()
之前,也可以更进一步
“因为在*p=2;
之后,j
的值由1
赋值,对吗?”
不,您似乎在这里混淆了控制流和范围方面非常困难的东西。f
的定义放在全局变量i
和j
的定义之前
这并不意味着全局变量在函数之后赋值
int i = 0, j = 1;
是全局范围内的i
和j
(立即初始化的声明)的定义,而不是赋值
调用f
后j
2
的值是正确的,因为:
通过引用传递给j
,其地址分配给指针参数f
q
- 指针
的值分配给指针q
p
- 然后取消对
的引用,它指向调用者中的p
,并将j
分配给2
j
- 以下是发生的情况:
int i = 0, j = 1;
因为在
p=q之后
,p
指向j
但int j=1;在*p=2之后;好的,为什么值没有变为1可能是离题了:但我建议对于像这样简单的代码示例,拿支笔和纸重新画出发生的事情可能会帮助您理解。另外:我建议不要阅读标准书,但教程可能会激发你的兴趣,帮助你理解。除了其他人之外,我可以建议。它很容易理解,也能处理指针。@Akshay Hebbar如果你赋值2(*p=2;),为什么结果必须等于1?!!!我明白了!谢谢你,好的!!函数在关闭括号“}”后结束,但为什么i=0;然后呢?我不明白你的意思<代码>i初始化为0
,打印为0
。它没有被修改或在程序中使用,只有你知道为什么它会出现在代码中。我明白了!非常感谢。
statement i j p q
-----------------------------------------
int i = 0, j = 1; 0 1 - -
f(&i, &j); 0 1 &i &j
p = q; 0 1 &j &j
*p = 2; 0 2 &j &j
printf("%d %d \n", i, j); 0 2 - -