c++

C++ 개인 필기(6) 다중 포인터 및 배열

Voitcon 2024. 1. 25. 18:22

HelloWorld(const char* a) , const char* msg="Hello"

{ a="BYE"}

왜 수정이 안될까?

-> 다중포인터 사용하면 가능하다.

**PP -> PP[주소1] -> 8바이트  , 주소1[주소2] -> 주소2[] -> 1바이트 가방(const char)

const char **pp=&a

-> pp[&a], a[주소] -> 주소2[수정] -> *pp=BYE 이런식으로 수정 가능.

 

배열 -> 데이터의 묶음

포인터 -> 주소를 담는 가방

배열의 이름은 배열의 시작주소값을 가리키는 TYPE*포인터로 변환가능

[TYPE형 1차원 배열]과 [TYPE형 * 포인트]는 완전히 호환가능

 

int arr[2][2]={(1,2),(3,4)}

int **pp=arr -> 에러

만약 int **pp=(int **)arr -> 크래쉬가 남, 2차원 배열, 다중포인터는 호환이 안됨

-> pp[주소1] -> 주소1[주소2] -> 주소[] <- 이곳에 값이 안넣어진다.

int** pp=arr-> int(*pp)[2]=arr 이런식으로 정의해아한다.

 

객체지향.

절차지향 -> 함수가 메인

객체지향 -> 객체가 메인

객체 -> 모든 오브젝트

class Player

public:

멤버 함수->로직

public:

멤버 변수 -> 데이터

 

Player::FUNC -> 플레이어에 속해있는 함수

Player p -> Instantiate -> 객체 생성

객체를 여러개 만들어도 서로의 주소를 침범을 안한다 (다른 영역에 있기때문)

일반 함수 호출이나 멤버 함수 호출 -> 객체 본인의 주소를 넘겨준다. -> 멤버함수 내에서 자기 자신의 정보 수정가능

 

** 여담

언리얼엔진5에서 c++로 프로그래밍 하게 되면 액터,폰,캐릭터 등 특정 객체에 대한 c++ 파일을 만들면 헤더 파일과 cpp 파일을 생성한다.

각각의 오브젝트 마다 다르지만 공통적으로 cpp 파일에는 생성자는 공통적으로 만들어진다.

비주얼 스튜디오 c++ 코딩처럼 객체 생성이 따로 필요가 없다.