【发布时间】:2012-08-12 05:15:36
【问题描述】:
我从 c++ 入门书中得到了这段代码,它是用来解释删除操作符的。但是,我不明白的是程序如何调用这两个函数以及它们如何交互。
// delete.cpp -- using the delete operator
#include <iostream>
#include <cstring> // or string.h
using namespace std;
char * getname(void); // function prototype
int main()
{
char * name; // create pointer but no storage
name = getname(); // assign address of string to name
cout << name << " at " << (int *) name << "\n";
delete [] name; // memory freed
name = getname(); // reuse freed memory
cout << name << " at " << (int *) name << "\n";
delete [] name; // memory freed again
return 0;
}
char * getname() // return pointer to new string
{
char temp[80]; // temporary storage
cout << "Enter last name: ";
cin >> temp;
char * pn = new char[strlen(temp) + 1];
strcpy(pn, temp); // copy string into smaller space
return pn; // temp lost when function ends
}
本书提供了以下示例运行:
Enter last name: Fredeldumpkin
Fredeldumpkin at 0x004326b8
Enter last name: Pook
Pook at 0x004301c8
我不明白的是“输入姓氏:”是如何以及为什么执行了两次,为什么char * getname()函数在int main()之前执行,以及这两个函数是如何相互作用的。
【问题讨论】:
-
多么可怕的程序。你在用什么书?
-
你不是在阅读那些业余的、不完整的维基书籍之一吗?
-
main呼叫getname两次,这就是“输入姓氏”显示两次的原因。 -
是的,看来你是从错误的脚开始学习 C++,买好东西或寻找优质的免费材料:mindview.net/Books/TICPP/ThinkingInCPP2e.html
-
@第一个两位评论员:Addison Wesley 的 C++ Primer Plus 第 6 版。另外,是的,代码非常奢侈。此外,令人遗憾的是,这本书是业余的。 @Giovanni Azua:我稍后会去 ebay 大礼包,并在我的列表中添加一本更好的书(当然,我会研究哪些书是好书和坏书)。感谢您的提醒。