此C++代码中以何种方式调用函数

In what manner are the functions called in this C++ code?

本文关键字:方式 调用 函数 何种 C++ 代码      更新时间:2023-10-16

我从 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

我不明白的是"输入姓氏:"是如何以及为什么被执行两次,为什么在 int main() 之前执行 char * getname() 函数,以及这两个函数如何相互作用。

"

输入姓氏"被打印了两次,因为它被打印在getname()中,getname()被调用了两次。

getname()int main()之前没有被执行,它被声明。必须声明它,以便当编译器编译main()(使用getname())时,编译器知道要做什么。

main()是第一段可执行代码(开发人员通常对其有影响,但也有例外)。程序中发生的一切都是因为main()这样做,或者main()调用的东西(直接或间接)这样做。在您的示例中,main()

: 执行以下操作:
  1. 调用 getname()
  2. 根据 getname() 的返回打印一些东西
  3. 释放在 getname() 中分配的资源
  4. 调用 getname()
  5. 根据 getname() 的返回打印一些东西
  6. 释放在 getname() 中分配的资源