gpt4 book ai didi

c++ - 返回本地引用或指针时的行为差异

转载 作者:太空狗 更新时间:2023-10-29 23:48:15 27 4
gpt4 key购买 nike

#include <iostream.h>
using namespace std;

class A {
public:
virtual char* func()=0;
};

class B :public A {
public:
void show() {
char * a;
a = func();
cout << "The First Character of string is " << *a;
}
char * func();
};


char* B::func() {
cout << "In B" << endl;
char x[] = "String";
return x;
}

int main() {
B b;
b.show();
}

这里的问题是我正在返回一个本地变量指针/引用。目前它是 char x[]="String",但是当我使用指针 char *x="String" 时,结果是 "S" 但当 Array 引用时,输出为 (i)

最佳答案

当你做类似的事情时:

char *f(){ return "static string"; }

您返回的是字符串文字的地址,但该字符串文字不是函数的本地地址。相反,它是静态分配的,因此返回它会给出明确定义的结果(即字符串在函数退出后继续存在,因此它可以工作)。

当您(尝试)像这样返回 char 数组的地址时:

char *f() { 
char x[] = "automatically allocated space";
return x;
}

编译器在堆栈上为 x 分配空间,然后从您无法直接访问的字符串文字对其进行初始化。您返回的是堆栈中内存的地址,不是字符串文字本身——因此一旦函数退出,该数组就不复存在,您不知道还有什么可能会放在那个地址。尝试使用该地址会导致未定义的行为,这意味着任何事情都有可能发生。

关于c++ - 返回本地引用或指针时的行为差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1899105/

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