修改函数中的指针值

时间:2016-02-24 17:33:45

标签: c pointers

我正在研究指针,我正在尝试理解这段代码。

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值?

1 个答案:

答案 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*,可以直接传递。