为什么getname()返回的是整句?

#include <iostream>
#include <cstring>
using namespace std;
char*getname(void);
int main()
{
char*name;
name=getname();
cout<<name<<" at "<<(int*)name<<endl;
delete [] name;

name=getname();
cout<<name<<" at "<<(int*)name<<endl;
delete [] name;
return 0;
}
char*getname()
{
char temp[80];
cout<<"Enter last name:";
cin>>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

pn指针指向的地址应该只有cin>>temp的字符串吧,比如只有一个a。怎么连上面那句"Enter last name:";都有了。

一只甜甜圈
浏览 119回答 3
3回答

江户川乱折腾

函数调用,实际上是用实参代替形参,然后执行函数体。getname(); 无参。所以就是执行 函数体,一直执行到 return,把值送回来。函数体内有打印语句,打印就会留下痕迹。name=getname(); 先执行函数体,(输入输出语句留下痕迹),执行到 return,把值送回来存入name。 Enter last name: 是打印语句留下的痕迹。

青春有我

getname()返回的是指向你输入的字符(比如a)的指针,但你调用getname()时,里面有句输出cout<<"Enter last name:";,故会出现 "Enter last name:", 而不是存在temp中的字符

慕哥9229398

这是字符串打印的特性,它返回的确实是字符串的首地址但是cout函数 对字符串的输出 会在遇到字符串结束符\0截止所以整句都输出了但返回的是整句这个说法不太准确cout是输出流, 对 << 有重载,当遇到字符串的时候就那样输出
打开App,查看更多内容
随时随地看视频慕课网APP