最近我在 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;
}
Run Code Online (Sandbox Code Playgroud)
在该线程中据说,如果我在函数调用和访问该变量之间放置任何内容,我将错过该值。
无论我做什么,我都可以访问局部变量,但我记得我根据该线程编写了一个示例,并且显示了与所告诉的相同的行为。
我缺少什么?
小智 5
您提到的未命名线程误导了您。
在您的示例中, func() 返回一个整数。返回一个整数总是安全的,无论它来自哪里。
值(int、char、double)永远不会共享。每次传递/返回它们时,都会传递/返回该值的副本,因此它是安全的。
指针(int*、char*、double*)可以共享它们所指向的内存位置。传递/返回它们可能很危险,因为该内存位置的值会随着时间的推移而改变。你必须小心指针。