0

このコードは、削除演算子を説明するためのc++入門書から入手しました。しかし、私が理解していないのは、プログラムが2つの関数をどのように呼び出し、それらがどのように相互作用するかです。

// 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

私が理解していないのは、「Enter last name:」が2回実行された方法と理由、int main()の前にchar * getname()関数が実行された理由、および2つの関数が相互に作用する方法です。

4

1 に答える 1

5

「Enterlastname」は、2回印刷されて呼び出されるため、2回印刷されましgetname()getname()

getname()が実行される前に実行されないint main()場合は、宣言されます。main()コンパイラーが(を使用してgetname())コンパイルしているときに、コンパイラーが何をすべきかを認識できるように宣言する必要があります。

main()は実行可能コードの最初の部分です(通常、開発者が影響を及ぼしますが、例外があります)。あなたのプログラムで起こることはすべて、main()それをするか、何かmain()が(直接的または間接的に)それをするからです。サンプルでmain()は、​​次のことを行います。次のことを行います。

  1. getname()を呼び出す
  2. getname()の戻り値に基づいて何かを出力します
  3. getname()内に割り当てられたリソースを解放します
  4. getname()を呼び出す
  5. getname()の戻り値に基づいて何かを出力します
  6. getname()内に割り当てられたリソースを解放します
于 2012-08-15T21:12:35.070 に答える