+ -
当前位置:首页 → 问答吧 → 弱问题一个局部变量和指针的问题

弱问题一个局部变量和指针的问题

时间: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得到的指针就不是想要的。

为什么会有这种差别?原理是什么?

作者: 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";
这算什么呢?

作者: qiaokelii   发布时间: 2010-09-10



QUOTE:
回复  pandaiam


    char p[]="hello,world";
这算什么呢?
qiaokelii 发表于 2010-09-10 21:51




    在栈中分配了一个字符数组,局部属性,随着函数的返回,这段内存就没有意义了

作者: liwangli1983   发布时间: 2010-09-10

回复 qiaokelii


   第一种变量在文字常量区 当你返回地址后 是复制一个同样的指针变量 而这个指针变量仍然指向之前定义时候的字符串起始位置 但是这个位置是有可能再次被申请的 这时候就会出问题了
第二种 是直接把文字常量区的字符复制到栈中 函数结束栈释放 返回的只是一个野指针 所以这个指针指向位置 在很多编译器中 仍可以正常显示 不过和上边一样 这个位置是有可能再次被申请的

作者: 奥丁@   发布时间: 2010-09-10

相关阅读 更多