2012-08-15 2 views
0

나는이 코드를 삭제 연산자를 설명하기위한 C++ 입문서에서 가져 왔습니다. 그러나, 내가 이해할 수없는 것은 프로그램이 두 함수를 호출하는 방법과 그것들이 어떻게 상호 작용하는지에 관한 것이다.이 C++ 코드에서 함수는 어떤 방식으로 호출됩니까?

는 내가 이해하지 못하는 것은 어떻게 그리고 왜 "성을 입력 :"입니다
Enter last name: Fredeldumpkin 
Fredeldumpkin at 0x004326b8 
Enter last name: Pook 
Pook at 0x004301c8 

:

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

이 책은 다음과 같은 샘플 실행을 제공, 두 번 실행 된 이유의 char *의 getname() 함수 int main() 전에 실행되었고 두 함수가 서로 상호 작용하는 방식입니다.

+4

무서운 프로그램. 어떤 책을 사용하고 있습니까? –

+0

아마추어 인 불완전한 위키 책 중 하나를 읽고 있지 않습니까? – ApprenticeHacker

+3

'main'은'getname'을 두 번 호출하기 때문에 "Enter last name"이 두 번 표시됩니다. – birryree

답변

5

"성 입력"은 getname()getname()에서 인쇄되기 때문에 두 번 인쇄되었습니다. 두 번 호출되었습니다.

getname()int main() 이전에 실행되는이 아니고, 이 아니며, 선언됩니다. 컴파일러가 main() (getname()을 사용)을 컴파일 할 때 컴파일러가 수행 할 작업을 알 수 있도록 선언해야합니다.

main()은 개발자가 일반적으로 영향을 미치지 만 예외가있는 첫 번째 실행 코드입니다. 프로그램에서 발생하는 모든 일은 main()이 수행하거나 main() (직접 또는 간접적으로) 호출하기 때문에 발생합니다. 샘플에서 main()는 : getname() getname()

  • 전화 내부에 할당 된
  • 릴리스 자원의 반환을 기반으로

    1. 전화 getname()
    2. 인쇄 뭔가 다음을 수행하십시오 getname() getname()
    012 내부에 할당 된 getname()
  • 릴리스 자원의 반환을 기반으로
  • 인쇄 뭔가
  • +0

    "return *"은 C++의 다른 의미 때문에 단어의 이상한 선택입니다. "할당 해제"또는 "폐기"가능성이 있습니까? –

    +0

    좋은 지적; 내 용어를'release'로 변경했습니다. – mah

    +0

    그래서 defname() : Python의 시스템과 같아 보입니다. int main() 뒤에 getname()을 선언하는 것이 이상합니다. 그렇지 않으면 컴파일러에서 경고를받습니다. 어쨌든, 설명 주셔서 감사합니다! 나는 그들이 분리 된 기능이라고 생각했다. int()의 구성 요소 인 getname()이 훨씬 더 의미가 있습니다. – Stumbleine75

    관련 문제