我从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
}
Run Code Online (Sandbox Code Playgroud)
该书提供了以下示例运行:
Enter last name: Fredeldumpkin
Fredeldumpkin at 0x004326b8
Enter last name: Pook
Pook at 0x004301c8
Run Code Online (Sandbox Code Playgroud)
我不明白的是"输入姓氏:"是如何以及为什么被执行两次,为什么char*getname()函数在int main()之前执行,以及这两个函数如何相互交互.
"输入姓氏"被打印两次,因为它被打印getname()并被getname()调用两次.
getname()是不是之前执行int main(),特此声明.必须声明它以便在编译器编译时main()(使用getname()),编译器知道要做什么.
main()是第一块可执行代码(开发人员通常会影响,但也有例外).你的程序中发生的一切都是因为要么main()是它,要么是main()(直接或间接地)调用它.在您的示例中,main()将:执行以下操作: