#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:aa at 00380930Enter last name:bb at 00381D68Press any key to continuepn指针指向的地址应该只有cin>>temp的字符串吧,比如只有一个a。怎么连上面那句"Enter last name:";都有了。
3 回答
江户川乱折腾
TA贡献1851条经验 获得超5个赞
函数调用,实际上是用实参代替形参,然后执行函数体。
getname(); 无参。所以就是执行 函数体,一直执行到 return,把值送回来。
函数体内有打印语句,打印就会留下痕迹。
name=getname(); 先执行函数体,(输入输出语句留下痕迹),执行到 return,把值送回来存入name。 Enter last name: 是打印语句留下的痕迹。
青春有我
TA贡献1784条经验 获得超8个赞
getname()返回的是指向你输入的字符(比如a)的指针,但你调用getname()时,里面有句输出cout<<"Enter last name:";,故会出现 "Enter last name:", 而不是存在temp中的字符
慕哥9229398
TA贡献1877条经验 获得超6个赞
这是字符串打印的特性,它返回的确实是字符串的首地址
但是cout函数 对字符串的输出 会在遇到字符串结束符\0截止
所以整句都输出了
但返回的是整句这个说法不太准确
cout是输出流, 对 << 有重载,当遇到字符串的时候就那样输出
添加回答
举报
0/150
提交
取消