我有以下案例:

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/

10-12 12:33
查看更多