gpt4 book ai didi

c++ - 为什么从 C++ 中的函数返回时 char 数组会丢失?

转载 作者:行者123 更新时间:2023-11-30 01:01:37 33 4
gpt4 key购买 nike

我知道,如果我们在函数内声明变量而不为它们分配内存,它们将在函数完成其工作后丢失。

打印以下代码:

(null)
5
char* getString() 
{
char arr[] = "SomeText";
return arr;
}

int getInt()
{
int b = 5;
return b;
}

int main()
{
printf("%s", getString());
printf("\n");
printf("%d", getInt());

return 0;
}

arrb 变量都是在堆栈上创建的,因此它们都应该在函数结束时销毁。我的问题是,当变量 arr 丢失时,为什么变量 b 不会丢失?

最佳答案

C(并由 C++ 继承)的一个独特且经常令人困惑的特性是,在表达式中使用数组时,它不被视为值的集合,而是(大多数情况下)被视为指向其第一个元素的指针。 因此,当您从函数返回一个数组时,您返回的是其第一个元素的地址。

Dereferencing the address of an object with automatic storage duration that is no longer in scope results in undefined behavior.

当您从函数返回一个值时,该值的拷贝将返回给调用者。

因此,当您返回一个整数时,调用者会收到该整数值的拷贝。

如果值是指针,则复制的值是指针。如果指针指向无效对象,那么如果指针的接收者试图取消引用指针值,则会导致未定义的行为。


有 3 个异常(exception):(1) 作为 & 的操作数; (2) 作为sizeof的操作数; (3) 用于初始化数组的字符串文字。在C++中,还有其他异常(exception): (4) 作为decltype的操作数; (5) 作为引用参数的函数实参; (6) 一个对象来初始化一个引用变量; ...可能我忘记了其他事情...

关于c++ - 为什么从 C++ 中的函数返回时 char 数组会丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58782775/

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