关于getname()函数

[复制链接]
查看11 | 回复4 | 2011-5-13 20:36:27 | 显示全部楼层 |阅读模式
#include
#include
using namespace std;
char*getname(void);
int main()
{
        char*name;
        name=getname();
        cout>temp;
        char*pn=new char[strlen(temp)+1];
        strcpy(pn,temp);
        return pn;
}
这是编译结果
Enter last name:a
a at 00380930
Enter last name:b
b at 00381D68
Press any key to continue
为什么getname()返回的是整句?pn指针指向的地址应该只有cin>>temp的字符串吧,比如只有一个a。怎么连上面那句"Enter last name:";都有了。

回复

使用道具 举报

千问 | 2011-5-13 20:36:27 | 显示全部楼层
函数调用,实际上是用实参代替形参,然后执行函数体。getname(); 无参。所以就是执行 函数体,一直执行到 return,把值送回来。函数体内有打印语句,打印就会留下痕迹。name=getname();先执行函数体,(输入输出语句留下痕迹),执行到 return,把值送回来存入name。Enter last name:是打印语句留下的痕迹。
回复

使用道具 举报

千问 | 2011-5-13 20:36:27 | 显示全部楼层
getname()返回的是指向你输入的字符(比如a)的指针,但你调用getname()时,里面有句输出cout<<"Enter last name:";,故会出现 "Enter last name:", 而不是存在temp中的字符
回复

使用道具 举报

千问 | 2011-5-13 20:36:27 | 显示全部楼层
这是字符串打印的特性,它返回的确实是字符串的首地址但是cout函数 对字符串的输出 会在遇到字符串结束符\0截止所以整句都输出了但返回的是整句这个说法不太准确cout是输出流, 对 << 有重载,当遇到字符串的时候就那样输出
回复

使用道具 举报

千问 | 2011-5-13 20:36:27 | 显示全部楼层
cout<<"Enter last name:";不就是输出啊,每次调用函数都会先输出这一句
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行