gpt4 book ai didi

c - 如果类型是指针,则函数返回值的范围

转载 作者:行者123 更新时间:2023-11-30 18:50:34 25 4
gpt4 key购买 nike

int* getINT ()
{
int y =10;
int *x = &y;
return x;
}
char* getARRAY()
{
char str[]= "Hai";
return str;
}

int Main(void)
{
char *ptr;
int *result;
result = getINT();
printf ("%d\n", *result);
ptr = getARRAY();
printf("%s", ptr);
}

在主函数中,*result 的值是 10,而 ptr 的值是垃圾值。我的疑问是为什么 *str 失去范围而 *x 不失去范围

最佳答案

两者都是无效的,并且结果仍然是10,这更多的是巧合。这两次函数中的值仅在函数中存在,一旦离开函数它们就不再存在,因为两者都在函数当前堆栈帧内的堆栈上分配。如果函数返回,堆栈帧将被删除,如果您调用另一个函数,则空间将被重用。因此,指向函数堆栈上数据的任何指针在函数之外基本上都是无用的,因为当您尝试访问数据时数据将被覆盖的可能性非常高。

关于c - 如果类型是指针,则函数返回值的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39899397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com