2013-03-16 6 views
-4

저는 새로운 C++ 프로그래밍이며 구조체와 포인터로 시작 했으므로 의심 스럽습니다.void 함수에서 구조체 포인터를 반환하십시오.

난 구조체 보이드 함수() 나 함수를 호출하기 my_struct *의 x의 값을 반환해야

struct my_struct 
{ 
int x; 
} 

void my_function(){ 

my_struct* x=10 

} 

있다.

내가 구조체 포인터가 무효 기능 (사용하지 않는 돌아 본 예) 대신에 그들이 무효 함수에서 구조체의 포인터를 반환하기 때문에 불가능이

struct my_struct 
    { 
    int x; 
    } 

    struct my_struct* my_function(int* x){ 

    //assign the value for X and return by assign a reference `&` from caller function 

    } 

처럼 사용하거나 할 대부분의 void 포인터를 사용해야합니까? pls은 나와 맺어지며 프로그래밍에 익숙하지 않습니다.

+1

'void'의 반환 유형은 '함수가 값을 반환하지 않음'을 의미합니다. 반환해야 할 경우 함수에 적절한 반환 유형을 지정합니다. 그것은 당신의 경우에'my_struct *'가 될 것입니다. – Angew

+1

또한,'my_struct * x = 10'이 올바르지 않습니다. –

+0

함수와 포인터가 완전히 이해되지 않으면 함수 호출 내에서 동적으로 할당 된 포인터를 반환하지 마십시오. 이후에 삭제하는 것을 잊어 버리면 메모리 누수가 발생할 수 있습니다. 가능한 경우 구조체를 참조로 전달하십시오. 그렇지 않으면, 부스트 라이브러리의 스마트 포인터를 살펴보십시오. – FKaria

답변

1

첫째 :

void my_function() { 
    my_struct* x=10 
} 

불법입니다. 나는 포인터의 의미를 완전히 이해했다고는 생각하지 않는다. 하나는 my_struct* my_function()

  • 와 반환 값을 설정하거나 반환 값을 저장해야합니다 외부에있는 변수 정의

    • : my_struct* my_function(my_struct**);를 당신이이 값을 반환합니다.

  • 여기에 동적 할당을 사용하여 몇 가지 예입니다 :

    my_struct* my_function() { 
        return new my_struct { 10 }; 
    } 
    

    나 :

    void my_function(my_struct** var) { 
        *var = new my_struct { 10 }; 
    } 
    

    가 감지하는 것이 가능 반환 값을 사용하는 것이 좋습니다 인을하게합니다. 단일 함수에서 여러 개의 반환 값이 필요할 때 두 번째 방법을 사용할 수 있습니다.

    +0

    @jueecySo 만약 내가 * var의 값을 프린트 할 필요가 있다면,이 void 함수()에서 프린트하거나 콜러 함수에서 프린트해야한다. – Rd7

    +0

    @ Rd7, 귀하의 함수가 함수에서 변수를 인쇄하기로되어있는 경우. 그렇지 않으면 호출자 함수에서. – Shoe

    0

    반환 형식을 사용하지 않고 호출자에게 값을보고하려면 호출자가 제공 한 버퍼를 채울 수 있습니다. 이것은 종종 "out 매개 변수"라고합니다. 모든

    void my_function(my_struct** result) 
    { 
        my_struct* x = new my_struct{ 10 }; 
        //... 
        *result = x; 
    } 
    
    관련 문제