#include "iostream"
using namespace std;
char* get_memory1()
{
char p[]="hello";//p这个数组变量的右值在函数局部栈上
return p;//returning address of local variable or temporary
}
char* get_memory2()
{
char *p="hello";//p这个指针指向的是一个静态存储区
return p;//正常
}
char* get_memory3()
{
char *p=(char*)malloc(sizeof("hello"));//p这个指针指向的是一个堆内存
strcpy(p,"hello");
return p;//正常
}
void main()
{
char *p1=get_memory1();
cout<<p1<<endl;
char *p2=get_memory2();
cout<<p2<<endl;
char *p3=get_memory3();
cout<<p3<<endl;
if(p2==p3)
cout<<"两个相同的字符串常量在静态存储器只占一份位置空间"<<endl;
else
cout<<"两个相同的字符串常量在静态存储器占两份不同的位置空间"<<endl;
}
另外:最近简单看了下C和指针中关于变量的讲解。弄清楚一个变量的作用域;链接属性;存储类型;是非常重要的
程序的编译生成目标文件; 然后链接成可执行文件;然后程序进入宿主机执行。