【问题标题】:is it possible? passing address of local static value to main pointer?是否可以?将本地静态值的地址传递给主指针?
【发布时间】:2016-09-23 09:39:59
【问题描述】:
#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;
}

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

【问题讨论】:

  • pip 的副本,如果您更改p,则不会更改ip
  • 请原谅这个显而易见的问题,但是如果不是用 voidf 返回结果,难道不是更好地返回地址而不是首先使用参数吗?
  • 这个问题已经被问过很多次了,一个标准的答案会很棒。

标签: c pointers static


【解决方案1】:

这样你最终会改变本地指针的值,你需要从main传递一个指向指针(&amp;)的指针,并在函数中使用解引用运算符(*):

#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;
}

【讨论】:

    【解决方案2】:

    你必须给指针传递一个指针来改变实际指针的值:

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

    话虽如此,但不一定建议这样做。我能想到的唯一直接用途是将全局初始化的执行延迟到第一次使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      相关资源
      最近更新 更多