포인터 일 때 함수의 반환 유형에 대한 혼란

신자

다음 코드를 작성했습니다.

#include <iostream>
using namespace std;

const int * myFunction()
{
    int * p = new int(5);
    return p;
}
 
int main()
{
    int * q = myFunction();
    cout << "*q=" << *q;
    cout << endl;
    return 0;
}

오류를 수신하기 위해 의도적으로 위의 코드를 작성했습니다. 내가 만든 실수는 내가 함수의 반환 형식 진술이다 myFunction()등을 const int *하지만, 내가 전화했을 때 myFunction()main(), 포인터 변수가 q선언되지 않았습니다 const. 의 반환 유형은 myFunction()반환 값을받을 변수 유형과 정확히 일치해야합니다 (여기에서 수정 했습니까? 이것이 내가 이해 한 것입니다).

그래서 11 번 줄을 const int * q = myFunction();. 이제 (pointer) 변수의 유형 q, 즉 const int *반환 유형과 정확히 일치 myFunction()하고 코드가 오류없이 컴파일되어 출력을 생성합니다 *q=5(이 시점까지 내 이해가 맞습니까?).

그런 다음 다음 코드를 작성했습니다.

#include <iostream>
using namespace std;

const int * const myFunction()
{
    int * p = new int(5);
    cout << "p: " << p;
    return p;
}
 
int main()
{
    int a;
    const int * q = myFunction();
    cout << "\nq=" << q;
    cout << "\n*q=" << *q;
    delete q;
    q = &a;
    cout << "\nq: " << q;
    cout << endl;
    return 0;
}

여기에서도 오류가 발생할 것으로 예상했습니다. 이제 반환 유형은 myFunction()is const int * constbut the (pointer) variable qhas type const int *. q상수 포인터로 선언되지 않았습니다. 그러나 프로그램이 컴파일되고 다음과 같은 출력이 나타납니다.

p : 0x36cb8 
q = 0x36cb8 
* q = 5 
q : 0x61ff08

두 번째 코드가 왜 컴파일되고 실행되는지 혼란 스럽습니다. 내가 생각한 것은 반환 값을받을 사람은 myFunction()항상 처리해야한다는 것입니다 (즉, 다른 메모리 주소를 사용할 수 없음). 그러나 포인터 변수 q는 다른 메모리 위치를 사용했습니다.

Eisenkeil

myFunction의 반환 유형은 반환 값을받을 변수 유형과 정확히 일치해야합니다. (제가 여기에서 맞습니까? 이것이 제가 이해 한 것입니다.)

아니요, 반환 유형은 변수 유형과 정확히 일치하지 않아야합니다. 그러나 반환 유형을 변수 유형으로 암시 적으로 변환 할 수 있어야합니다. 예를 들어 다음과 같은 내용이 컴파일됩니다.

int someInt = getMeAFloat();

경우 getMeAFloat반환 A를 floatA를하기 때문에,이 컴파일 float암시 적으로 변환 할 수 있습니다 int. (이는 경고를 제공하며의 추가 정보를 잃어 버리기 때문에 나쁘지만 float제 요점을 전달하려고합니다.)

일반적으로 a const int*int*.

user4581301이 지적했듯이 const두 번째 예제에서 두 번째는 중요하지 않습니다. 반환 된 포인터의 값만 주 함수의 포인터에 할당되기 때문입니다. 두 번째 const는 포인터 자체를 일정하게 만들어 값에 영향을주지 않습니다. 그 수단 const int * const myFunction()같다const int * myFunction()

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

mmap () 반환에 대해 혼란스러워-두 개의 다른 포인터?

분류에서Dev

C에서 함수에 대한 포인터 전달시 혼란

분류에서Dev

C에서 포인터를 반환 할 때 안전 문제에 대해 혼란 스러움

분류에서Dev

함수 유형에 대한 인터페이스 내의 일반 유형

분류에서Dev

C의 상수 포인터에 대한 혼란

분류에서Dev

반환 함수와 모나드에 대한 혼란

분류에서Dev

반환 함수와 모나드에 대한 혼란

분류에서Dev

반환에 대한 BST 조회 재귀 함수 혼란

분류에서Dev

decltype (auto) 대 auto &&는 함수의 반환 유형에 대한 일반적인 처리를 수행합니다.

분류에서Dev

C 언어의 포인터 기능에 대한 혼란

분류에서Dev

배열 혼란에 대한 포인터

분류에서Dev

배열 혼란에 대한 포인터

분류에서Dev

함수에 대한 값 인수로 일반 인수에 의존하는 유형

분류에서Dev

C에서 유형을 정의 할 때 포인터 구문에 대해 혼동

분류에서Dev

함수 포인터에 대한 일종의 포인터를 반환하는 C #에서 C dll의 함수 호출

분류에서Dev

모달에서 데이터를 반환 할 때 ng-grid의 범위 혼란

분류에서Dev

반환이있는 일반 함수 인수에 대한 TypeScript 인수 유형 유추?

분류에서Dev

Enum.GetValues ()의 반환 값에 대한 혼란

분류에서Dev

C ++의 rand () 함수에 대한 혼란

분류에서Dev

일반 함수에 대한 TypeScript 조건부 반환 유형

분류에서Dev

포인터에 대해 혼란스럽고 인수로 전달

분류에서Dev

함수 포인터에 대한 포인터를 반환하는 함수

분류에서Dev

반환 된 매개 변수에 대한 useReducer의 일반 유형

분류에서Dev

float에 대한 포인터를 반환하면 주 함수에 도달 할 때 주소가 변경됩니다.

분류에서Dev

함수에 대한 포인터를 반환하는 함수를 사용할 때 선언되지 않은 식별자 오류 (Visual Studio의 C ++)

분류에서Dev

struct에 대한 포인터를 함수가 반환 한 struct에 대한 다른 포인터와 동일하게 설정합니까?

분류에서Dev

내 BFS 타일 클래스의 참조 및 포인터에 대해 혼란 스러움

분류에서Dev

C : 열거 형을 반환하는 함수에 대한 함수 포인터

분류에서Dev

Unity-구성 요소의 유형 및 인스턴스에 대한 혼란

Related 관련 기사

  1. 1

    mmap () 반환에 대해 혼란스러워-두 개의 다른 포인터?

  2. 2

    C에서 함수에 대한 포인터 전달시 혼란

  3. 3

    C에서 포인터를 반환 할 때 안전 문제에 대해 혼란 스러움

  4. 4

    함수 유형에 대한 인터페이스 내의 일반 유형

  5. 5

    C의 상수 포인터에 대한 혼란

  6. 6

    반환 함수와 모나드에 대한 혼란

  7. 7

    반환 함수와 모나드에 대한 혼란

  8. 8

    반환에 대한 BST 조회 재귀 함수 혼란

  9. 9

    decltype (auto) 대 auto &&는 함수의 반환 유형에 대한 일반적인 처리를 수행합니다.

  10. 10

    C 언어의 포인터 기능에 대한 혼란

  11. 11

    배열 혼란에 대한 포인터

  12. 12

    배열 혼란에 대한 포인터

  13. 13

    함수에 대한 값 인수로 일반 인수에 의존하는 유형

  14. 14

    C에서 유형을 정의 할 때 포인터 구문에 대해 혼동

  15. 15

    함수 포인터에 대한 일종의 포인터를 반환하는 C #에서 C dll의 함수 호출

  16. 16

    모달에서 데이터를 반환 할 때 ng-grid의 범위 혼란

  17. 17

    반환이있는 일반 함수 인수에 대한 TypeScript 인수 유형 유추?

  18. 18

    Enum.GetValues ()의 반환 값에 대한 혼란

  19. 19

    C ++의 rand () 함수에 대한 혼란

  20. 20

    일반 함수에 대한 TypeScript 조건부 반환 유형

  21. 21

    포인터에 대해 혼란스럽고 인수로 전달

  22. 22

    함수 포인터에 대한 포인터를 반환하는 함수

  23. 23

    반환 된 매개 변수에 대한 useReducer의 일반 유형

  24. 24

    float에 대한 포인터를 반환하면 주 함수에 도달 할 때 주소가 변경됩니다.

  25. 25

    함수에 대한 포인터를 반환하는 함수를 사용할 때 선언되지 않은 식별자 오류 (Visual Studio의 C ++)

  26. 26

    struct에 대한 포인터를 함수가 반환 한 struct에 대한 다른 포인터와 동일하게 설정합니까?

  27. 27

    내 BFS 타일 클래스의 참조 및 포인터에 대해 혼란 스러움

  28. 28

    C : 열거 형을 반환하는 함수에 대한 함수 포인터

  29. 29

    Unity-구성 요소의 유형 및 인스턴스에 대한 혼란

뜨겁다태그

보관