【发布时间】:2014-02-27 07:33:40
【问题描述】:
这是一个面试问题,但我不知道该怎么做。
假设我们在函数中声明了一个局部静态变量。面试官问我不调用函数,可以修改吗?我不知道怎么。但是我想也许我们可以通过某种方式获取局部静态变量的地址?
【问题讨论】:
-
可能你可以把这个静态变量的地址写到全局变量中,比如
这是一个面试问题,但我不知道该怎么做。
假设我们在函数中声明了一个局部静态变量。面试官问我不调用函数,可以修改吗?我不知道怎么。但是我想也许我们可以通过某种方式获取局部静态变量的地址?
【问题讨论】:
允许返回指向静态存储对象的指针,例如
#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
或者,您当然可以将指针传递给指针并将其存储在那里而不是返回它。
【讨论】:
我认为这是一个很好的面试问题,但有点目的是让你的答案偏向错误的答案。
您提出问题的方式可能会让您思考“我怎样才能绕过这种语言限制?”
我的答案是。 “静态局部的目的是控制范围。如果我们需要更广泛的范围,应该正确定义变量。”换句话说,我的回答是不要那样做。
你的答案是如何适应环境的有用衡量标准。面对现有设计中的障碍时,您会怎么做:绕过它,还是修复它?
一些可能有助于阐明我的观点的详细说明:
你在休息室,面试官问“看看那个糖果自动售货机 - 有没有可能在不花钱的情况下取出糖果?”你开始思考“如果我使用咖啡搅拌器,我可能会……” 第二天,你仍在研究如何从机器中取出糖果。
不同的面试官可能会问同样的问题“你如何从糖果机中取出糖果?”你说“放钱”
关于如何处理现有界面的问题是同一个问题,但会误导你。
【讨论】: