inflearn logo
강의

Course

Instructor

[MMORPG Game Development with C++ and Unreal Series] Part 1: Introduction to C++ Programming

클래스 타입의 포인터 질문합니다

546

siniz10174993

4 asked

0

class Knight(){

public:

void GetHp(){

}

}

int main(){

(1) Knight k1

k1.GetHp()

(2) Knght *k1

k1->GetHp()

함수를 호출할 때 멤버 함수 같은 경우 어떤 특정 객체의 주소를 넘겨주는 것까지 포함하고 있는 규약을 따르고 있고 마치 포인터와 유사하듯이 k1의 주소 즉 Knight의 스택 주소를 넘겨줘서 멤버 함수 내부에서 자기 자신의 정보를 수정할 수 있다고 알고 있습니다 .

k1이 포인터 타입일 경우와 아닐 경우 둘 다 Knight의 주소를 담고 있지만 큰 차이점으로는 k1은 Knight의 스택 주소를 갖고 있고, 그 스택 영역이 끝나면 k1으로 더 이상 Knight의 접근할 수 없고

*k1은 Knight의 힙 영역에 주소를 갖고 있는 것이 큰 차이점이라고 보면 될까요?

int a=1 int *b=&a

그리고 포인터는 b의 변수에 a의 주소를 갖고 있고 그 주소를 타고 가면 int타입이 있을 것이라고 했는데 Knight *k1는 k1의 어떤 주소가 담겨 있는데 그 주소로 가면 Knight 타입이 있다는 의미인데 k1의 어떤 주소를 갖고 있는지 명시하지 않아도 Knight의 주소를 갖고 있을 것이라고 어떻게 아는 것일까요?

 

c++ C++

Answer 1

1

Rookiss

k1.GetHp()와 k1->GetHp()
의 차이는 크지 않습니다.

멤버 함수는 기본적으로 GetHp를 호출할 때
객체의 주소를 첫 번째 인자 (혹은 레지스터)에 넣게 됩니다.
실제로 해당 부분에 Breakpoint를 걸고 어셈으로 살펴보시기 바랍니다.
느낌적으로 GetHp(k1의주소, ...) 이런 식으로 동작합니다.

visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.

0

541

1

정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?

0

441

1

strcpy() 구현 관련 질문

0

513

1

빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?

0

452

1

입력값을 enum 값에 넣어주는거 이제 막혔나요?

0

497

1

템플릿 특수화 관련 질문

0

384

1

포인터 관련 질문합니다!

0

263

1

Unable to start assembler. Check your settings.

0

829

2

cpu선택

0

539

1

포인터 질문이 있습니다

0

322

1

20:35 에서 구조체 크기에 대한 질문입니다!

0

584

1

iterator 삭제관련

0

406

1

함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!

0

310

1

15 분 45초 대 질문

0

308

0

스택 프레임 질문합니다!

2

306

1

오른값 참조 in 게임

0

384

0

동적할당 질문이 있습니다

0

449

1

안녕하세요 메모리에 대해 질문드립니다.

0

304

1

함수객체 의 매개변수

0

358

1

복사생성자

0

434

1

main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요

0

419

1

포인터 실습 강의를 보고 궁금한게 있습니다.

0

353

1

스택 오버플로우

2

790

1

반환타입, 매개변수타입

0

296

1