弱问题一个局部变量和指针的问题
时间:2010-09-10
来源:互联网
#include <iostream>
using namespace std;
char *getstr(){
char *p="hello,world";
return p;
}
int main(){
cout<<getstr()<<endl;
return 1;
}
这样没问题
如果把getstr里面改为char p[]="hello,world";
main里面通过getstr得到的指针就不是想要的。
为什么会有这种差别?原理是什么?
using namespace std;
char *getstr(){
char *p="hello,world";
return p;
}
int main(){
cout<<getstr()<<endl;
return 1;
}
这样没问题
如果把getstr里面改为char p[]="hello,world";
main里面通过getstr得到的指针就不是想要的。
为什么会有这种差别?原理是什么?
作者: qiaokelii 发布时间: 2010-09-10
char *p="hello,world";
这是个字符串常量,放在数据段的,一直有效。
这是个字符串常量,放在数据段的,一直有效。
作者: pandaiam 发布时间: 2010-09-10
好像,前两天刚有人问过, 你找找? 那个 char *p = "hello, world",是指p是个指针指向字符串常量"hello,world"(存储在.rodata段),而char p[]="hello,world" 是说开辟了个临时字符数组,存储在函数栈里。
作者: linfenghuaster 发布时间: 2010-09-10
回复 pandaiam
char p[]="hello,world";
这算什么呢?
char p[]="hello,world";
这算什么呢?
作者: qiaokelii 发布时间: 2010-09-10
QUOTE:
回复 pandaiam
char p[]="hello,world";
这算什么呢?
qiaokelii 发表于 2010-09-10 21:51
char p[]="hello,world";
这算什么呢?
qiaokelii 发表于 2010-09-10 21:51
在栈中分配了一个字符数组,局部属性,随着函数的返回,这段内存就没有意义了
作者: liwangli1983 发布时间: 2010-09-10
回复 qiaokelii
第一种变量在文字常量区 当你返回地址后 是复制一个同样的指针变量 而这个指针变量仍然指向之前定义时候的字符串起始位置 但是这个位置是有可能再次被申请的 这时候就会出问题了
第二种 是直接把文字常量区的字符复制到栈中 函数结束栈释放 返回的只是一个野指针 所以这个指针指向位置 在很多编译器中 仍可以正常显示 不过和上边一样 这个位置是有可能再次被申请的
第一种变量在文字常量区 当你返回地址后 是复制一个同样的指针变量 而这个指针变量仍然指向之前定义时候的字符串起始位置 但是这个位置是有可能再次被申请的 这时候就会出问题了
第二种 是直接把文字常量区的字符复制到栈中 函数结束栈释放 返回的只是一个野指针 所以这个指针指向位置 在很多编译器中 仍可以正常显示 不过和上边一样 这个位置是有可能再次被申请的
作者: 奥丁@ 发布时间: 2010-09-10
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28