我有以下案例:
char *func1()
{
char val[]="This is test!";
return val;
}
现在我知道
char val[]
是函数的本地数组,它在函数返回时不再可用。现在为什么这不适用于以下情况?
char func2()
{
char val='C';
return val;
}
已经测试过了
int main()
{
printf("output1 :: %s \n",func1()); // print garbage characters
printf("output2 :: %c \n",func2()); // print `C`
return 0;
}
最佳答案
C 按值返回。当您在 return val;
中编写 func2
时,将返回 val
的副本。原来的val
被销毁也没关系,你还有副本。
在 func1
中,您返回指向 val
的指针的副本。这与 val
的副本不同。 val
中没有 func1
的副本。数组和指针是不同的;并且指针与它们指向的事物没有任何标识。一旦 val
被销毁,您就不能再使用指向它的指针。
关于c - 函数的返回值对于变量和数组的行为有何不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25605918/