关于char *p="Welcome to "; 与char p[]="Welcome to "的一点讨论
程序一:
#include
using namespace std;
char* GetMemory(void)
{
char *p="Welcome to ccnu";
return p;
}
void main(void)
{
char* str = NULL;
str = GetMemory();
printf(str);
}
程序二:
#include
#include
using namespace std;
char* GetMemory(void)
{
char p[] ="Welcome to ccnu";
return p;
}
void main(void)
{
char* str = NULL;
str = GetMemory();
printf(str);
}
表面区别仅在于函数GetMemory()中p的定义和初始化
对该用法的区别结果如下:
对于char *p=……p存储在栈区,指向的“Welcome to ccnu”在静态存储区(地址:ox417768),当函数 GetMemory()结束的时候,静态存储区的内容任然是"Welcome to ccnu"所以输出结果是"Welcome to ccnu"
对于char p[]=……我是这么理解的:
“Welcome to ccnu”本身在静态存储区,char p[]="Welcome to ccnu"这个式子把在静态区“Welcome to ccnu”的一个拷贝赋给了在栈里面分配空间的一个数组p[](拷贝在栈中的地址:ox12fe70,静态存储区的地址:ox417768),当函数GetMemory()结束时栈中的p被释放,指向的地址未知,但是存储在静态存储区的“Welcome to ccnu”不受影响!
欢迎调试!