关于下面的代码我的问题是" ptr"在当地街区。然后如何在功能块外部访问它。应该限制否?就像一个普通的变量。我们正在尝试访问另一个功能的内存位置。
int * add(int a, int b){
// local pointer variable
int *ptr=NULL,c=0;
c = a+b;
ptr = &c;
return ptr;
}
int main()
{
// calling add function and accessing
// the value received using reference(*).
printf("%d",*add(2,3));
}
答案 0 :(得分:2)
变量在堆栈上创建。堆栈由系统分配,其粒度至少为几千字节,并且不会被释放,因此它不会崩溃 - 内存仍然可以访问。
因此,虽然你在那里做了一个禁止和不安全的事情,它可能会意外地工作甚至显示正确的值,因为它们之间没有函数调用会覆盖堆栈和c
中的值其间。
答案 1 :(得分:0)
记住规则:永远不要返回指向局部变量的指针。
c
返回时变量add
不存在,因此指向它的指针无效。