请问下面的程序的两次输出结果为什么都是"abc"呢,不是说get()中的a是分配在栈上的吗
那么调用一次set()之后应该显示"123"或者其他字符串才对吧?
#include <iostream>
using namespace std;
char* get()
{
char a[]="abc";
return a;
}
void set()
{
char b[]="123";
}
void main()
{
char* p=get();
cout<<p<<endl;
set();
cout<<p<<endl;
}
a确实是在栈上的,但是“abc”是在常量区的。还有set并没有对p做什么操作,p怎么会改变呢。
你至少要传入参数,去改变吧!,这样不是直接创建了两个字符串了吗?
a是栈指针,但是恰巧是常量字符串,a,b分别指向不同的地址。可以打印出来对比