可能吗?将本地静态值的地址传递给主指针?

时间:2016-09-23 09:39:59

标签: c pointers static

<Router history={ browserHistory }>
        <Route path="/" component={ MainApp }>
            <IndexRoute component={ LandingPage } onEnter={ redirectIfLoggedIn } />
            <Route path="verify/:mode/:oobCode" component={ LandingPage } onEnter={ redirectIfVerified } />
            // other routes
        </Route>
</Router>

如果可能的话。 什么是原因错误? 我该如何修复代码?

2 个答案:

答案 0 :(得分:3)

这样你最终改变了本地指针的值,你需要从&传递指向指针(main)的指针并使用解除引用运算符(*)在功能中:

#include <stdio.h>

void f(int **p) {
    static int data = 5;

    *p = &data;
}

int main(void) {
    int *ip = NULL;

    f(&ip);
    printf("%d\n", *ip);
    return 0;
}

但通常我们更喜欢使用相同级别的间接返回函数的地址,这更容易阅读(至少对我而言):

#include <stdio.h>

int *f(void) {
    static int data = 5;

    return &data;
}

int main(void) {
    int *ip = f();

    printf("%d\n", *ip);
    return 0;
}

答案 1 :(得分:1)

您必须将指针传递给指针才能更改实际指针的值:

void some_fun(int **p)
{ 
    static int i = 10;
    *p = &i;
}

话虽如此,但这并不一定是可取的。我能想到的唯一直接用途是在第一次使用之前延迟执行全局初始化。