`

数组和指针的区别

    博客分类:
  • C++
 
阅读更多
分析一下代码
char *GetString2(void)
{
 char *p = "hello world";
 return p;
}
void Test5(void)
{
 char *str = NULL;
 str = GetString2();
 cout<< str << endl;
}
这段代码是可以正常运行的,GetString2返回了只读的内存块,在Test5里面应该是可以访问"hello world"字符串的,在Test5里面对str的任何操作,都是在操作"hello world",所以在Test5里面是不能修改str的内容的,如strcpy(str, "hello");代码将会运行报错,或对str进行内存释放,也会报错,但对str进行读取的话是正常的,如代码中正常显示"hello world"

代码2:
char *GetString(void)
{
 char p[] = "hello world";
 return p; // 编译器将提出警告
}
void Test4(void)
{
 char *str = NULL;
 str = GetString(); //str的内容是垃圾
 cout<< str << endl;
}
但这段代码运行后str的内容是垃圾,调试了下,发现代码段一、代码段二中GetString(void)返回的地址不一样,按照我的理解两个应该都是返回字符串数组的首地址,为什么两种方式得到的值不一样呢?
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics