在C中返回局部变量混淆

时间:2017-04-11 15:56:15

标签: c local-storage

最近我在stackoverflow上读了一个线程,无论是指针类型还是普通变量,都必须避免返回局部变量。我在我的C书中看到了一个例子,它返回了一个局部变量,所以我想再试一次

#include <stdio.h>
int func(int a, int b)
{
    int d, e, f;
    d = a;
    e = b;
    f = d+e;
    return f;
}
int main(void)
{
    int c = func(1, 2);
    printf("hello\n");//I put this printf in between
    printf("c = %d\n", c);//here c should be overwritten
    return 0;
}

在那个帖子中,有人说,如果我在函数调用和访问该变量之间放置任何东西,我将错过该值。

无论我做什么,我都可以访问本地变量,但我记得我根据该线程编写了一个示例,并且显示出与被告知的相同的行为。

我错过了什么?

1 个答案:

答案 0 :(得分:3)

你提到的未命名的帖子误导了你。

在您的示例中,func()返回一个整数。返回一个整数总是安全的,无论它来自何处。

永远不会共享值(int,char,double)。每次传递/返回它们时,都会传递/返回该值的副本,因此它是安全的。

指针(int *,char *,double *)可以共享它们指向的内存位置。传递/返回它们可能很危险,因为该存储位置的值将随时间而变化。你必须小心指针。