如何修改本地静态变量而不调用声明它的函数?

时间:2014-02-27 07:33:41

标签: c variables static local

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

假设我们在函数中声明了一个局部静态变量。面试官问我没有调用该功能,是否可以修改它?我不知道怎么。但我想我们可能会以某种方式获取本地静态变量的地址?

2 个答案:

答案 0 :(得分:3)

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

#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

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

答案 1 :(得分:1)

我认为这是一个很好的面试问题,但稍微倾向于将你的答案偏向于错误的答案。

你提出问题的方式,可能会让你思考“我怎样才能克服这种语言限制?”

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

您回答的方式是衡量环境适应性的有效方法。在现有设计中面对障碍时你会做什么:破解它或修复它?

可能有助于使我的观点清晰的一些细化:

你在休息室,面试官问“看到糖果自动贩卖机 - 是否有可能在没有钱的情况下取出糖果?”你的思绪开始旋转“如果我使用咖啡搅拌器,我可能会......”第二天,你还在研究如何将糖果从机器中取出。

另一位采访者可能会问同样的问题“你如何从糖果机中取出糖果?”你说“把钱放进去”

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