【问题标题】:How to modify a local static variable without calling the function where it is declared?如何在不调用声明它的函数的情况下修改局部静态变量?
【发布时间】:2014-02-27 07:33:40
【问题描述】:

这是一个面试问题,但我不知道该怎么做。

假设我们在函数中声明了一个局部静态变量。面试官问我不调用函数,可以修改吗?我不知道怎么。但是我想也许我们可以通过某种方式获取局部静态变量的地址?

【问题讨论】:

  • 可能你可以把这个静态变量的地址写到全局变量中,比如

标签: c variables static local


【解决方案1】:

允许返回指向静态存储对象的指针,例如

#include <stdio.h>

int *foo(void) {
    static int x;
    printf("%d\n", x);
    return &x;
}

int main(void) {
    int *p = foo();
    *p = 10;
    foo();
    return 0;
}

将打印:

0
10

或者,您当然可以将指针传递给指针并将其存储在那里而不是返回它。

【讨论】:

    【解决方案2】:

    我认为这是一个很好的面试问题,但有点目的是让你的答案偏向错误的答案。

    您提出问题的方式可能会让您思考“我怎样才能绕过这种语言限制?”

    我的答案是。 “静态局部的目的是控制范围。如果我们需要更广泛的范围,应该正确定义变量。”换句话说,我的回答是不要那样做。

    你的答案是如何适应环境的有用衡量标准。面对现有设计中的障碍时,您会怎么做:绕过它,还是修复它?

    一些可能有助于阐明我的观点的详细说明:

    你在休息室,面试官问“看看那个糖果自动售货机 - 有没有可能在不花钱的情况下取出糖果?”你开始思考“如果我使用咖啡搅拌器,我可能会……” 第二天,你仍在研究如何从机器中取出糖果。

    不同的面试官可能会问同样的问题“你如何从糖果机中取出糖果?”你说“放钱”

    关于如何处理现有界面的问题是同一个问题,但会误导你。

    【讨论】:

    • 但问题,如前所述,询问是否可能对其进行修改。
    • @jdr5ca -- 不错的方法。
    • 好的,我在回答中添加了试图解释我的观点,即虽然面试官的问题是“是否有可能”,但隐藏了“你应该尝试”的真正问题的话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多