• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

nonstatic 멤버 함수의 포인터 질문

22.08.29 00:11 작성 조회수 221

0

#include <iostream>

using namespace std;

class Some {

private:

static int val_;

int val2_=2;

public:

static int getVal() {

return val_;

//return val2_;

}

int temp() {

return this->val_+this->val2_;

}

};

int Some::val_ = 1;

int main() {

Some s1;

int (Some:: * ptr)() = &Some::temp;

cout << ptr << endl;

cout << (s1.*ptr)() << endl;

return 0;

}

안녕하세요.

위의 코드를 실행시켰을 때

1

3

이라는 결과가 나왔는데요,

ptr을 출력했을 때 1이 나왔습니다.

왜 ptr출력시 1이란 값이 나오는 걸까요? ptr만 출력했기 때문에 혹시 주소가 나올까 생각했는데 값이 나왔고, 또 왜 1이란 값이 나왔는지 잘 모르겠습니다.

답변 1

답변을 작성해보세요.

0

강민철님의 프로필

강민철

2022.08.30

1은 &Some::temp;의 값이 애초에 1이기 때문입니다.

함수의 주소 반환값을 cout 으로 찍어보면 1이 나옵니다.

아래와 같이요.

#include <iostream>

int foo()
{

    return 1;
}

int main()
{
    std::cout << &foo << std::endl;
    return 0;
}

주소값을 찍기 위해서는 printf의 %p를 이용하는 것이 좋습니다.

// #include <iostream>
#include <stdio.h>

int foo()
{

    return 1;
}

int main()
{
    // std::cout << &foo << std::endl;
    printf("%p", &foo);
    return 0;
}

이에 대한 이유는 아래 링크에 잘 나와있습니다.

참고 바랍니다.

https://bigpel66.oopy.io/library/cpp/etc/1