在这个C ++代码中调用函数的方式是什么?

时间:2012-08-15 21:05:16

标签: c++ function

我从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()之前执行,以及这两个函数如何相互交互。

1 个答案:

答案 0 :(得分:5)

“输入姓氏”已打印两次,因为它在getname()打印,getname()被调用两次。

getname() 未在<{1}}之前执行,它已被声明。必须声明它,以便在编译器编译int main()(使用main())时,编译器知道要做什么。

getname()是第一块可执行代码(开发人员通常会影响,但也有例外)。程序中发生的一切都是因为main()执行此操作,或者main()调用(直接或间接)执行此操作。在您的示例中,main()将:执行以下操作:

  1. call getname()
  2. 根据getname()
  3. 的返回打印内容
  4. 释放在getname()
  5. 中分配的资源
  6. call getname()
  7. 根据getname()
  8. 的返回打印内容
  9. 释放在getname()
  10. 中分配的资源