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

关于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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10697500/viewspace-548837/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值