C++ 一道简单的题目

[复制链接]
查看11 | 回复3 | 2009-1-4 21:48:32 | 显示全部楼层 |阅读模式
下列程序的运行结果为():
char *inputa()
{char str『20』=”123”;
return str;
}
char *inputp()
{char *str=”123”;
return str;}
void main()
{char *p=inputp();
cout<<inputa()<<”,”<<p<<<endl;
}
我用vc运行结果是:乱码,123
为什么啊?????字符指针跟字符数组之前的区别是怎么样的啊???这道题想到我发神经了,跪求!!!!

回复

使用道具 举报

千问 | 2009-1-4 21:48:32 | 显示全部楼层
在函数char *inputa()里面,str数组是一个临时变量,当函数结束时,str数组就被销毁,其临时存储地址被回收,你返回的指针是无效的,所以,当你输出这个地址的时候,程序显示乱码,因为这个地址已经不在指向str数组的内容,可能指向另外的对象。 而在函数char *inputp()里面,字符串‘123’是在堆分配的,其生存期是程序的生命期,你返回的字符串地址是有效的,程序输出正常...
回复

使用道具 举报

千问 | 2009-1-4 21:48:32 | 显示全部楼层
你这个是指针函数啊??指针和数组没区别可是你写的代码什么意思我没看懂char inputp() 这样定义不行吗? 为什么非要用char* inputp()...
回复

使用道具 举报

千问 | 2009-1-4 21:48:32 | 显示全部楼层
我也不太懂字符指针,帮你顶下。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行