ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于char *p="Welcome to "; 与char p[]="Welcome to "

关于char *p="Welcome to "; 与char p[]="Welcome to "

原创 Linux操作系统 作者:licup123 时间:2009-02-12 12:45:54 0 删除 编辑

关于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”不受影响!

欢迎调试!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10697500/viewspace-548837/,如需转载,请注明出处,否则将追究法律责任。

下一篇: C++位运算符
请登录后发表评论 登录
全部评论

注册时间:2008-06-22

  • 博文量
    51
  • 访问量
    117486