#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();
}
Run Code Online (Sandbox Code Playgroud)
这个问题是我正在修复本地varibale指针/引用.目前它是char x[]="String",但是当我使用指针时char *x="String",结果是"S" 但当数组引用时输出为(i)
当你做类似的事情时:
char *f(){ return "static string"; }
Run Code Online (Sandbox Code Playgroud)
您将返回字符串文字的地址,但该字符串文字不是函数的本地字符.相反,它是静态分配的,因此返回它会给出明确定义的结果(即字符串在函数退出后继续存在,因此它可以工作).
当你(尝试)返回像这样的char数组的地址时:
char *f() {
char x[] = "automatically allocated space";
return x;
}
Run Code Online (Sandbox Code Playgroud)
编译器x在堆栈上分配空间,然后从您没有直接访问权限的字符串文字初始化它.你要返回的是堆栈中内存的地址,而不是字符串文本本身 - 所以一旦函数退出,该数组就不再存在,你不知道该地址还有什么东西可以存放.尝试使用该地址会导致未定义的行为,这意味着任何事情都可能发生.