我正在研究指针,我正在尝试理解这段代码。
int main()
{
int i=66 ;
int *x;
x=&i;
f(&x);
printf("%d",*x);
return 0;
}
void f(int *x)
{
int j=7;
x=&j;
printf("%d-",*x);
}
我期待输出:7-7,但我得到7-66。我想当我写的时候
X =&安培;焦耳;
在函数中,原始指针现在被设置为j值的方向,这是正常的,因为printf返回7-但为什么当我回到主要的printf返回66?是不是现在设置为函数j值的指针?我知道当我关闭函数时函数中的值会丢失,但是为什么我的指针在运行函数后仍然设置为主函数中的i值?
答案 0 :(得分:6)
在您的函数f(int* x)
中,您将变量x
指定给本地临时变量j
的地址。您真正想要做的是将x
所指向的值分配给j的值。
#include <stdio.h>
#include <stdlib.h>
void f(int *x)
{
int j=7;
*x=j;
printf("%d-",*x);
}
int main()
{
int i=66 ;
int *x;
x=&i;
f(x);
printf("%d",*x);
return 0;
}
这可以运行here。
第二个问题是你在main函数中获取变量x
的地址,并将其作为参数传递给f(int*)
,它成为指向int的指针(一个int**
不是int*
)。请注意,x
已经是int*
,可以直接传递。