关于C++函数调用堆栈的问题

请问下面的程序的两次输出结果为什么都是"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分别指向不同的地址。可以打印出来对比