새소식

인기 검색어

카테고리 없음

[언리얼 MMORPG pt1] 포인터 마무리

  • -
#include <iostream>
using namespace std;

// 오늘의 주제: 포인터 마무리

// 1) 포인터 vs 배열 2탄
// 2) 주의사항 (마음가짐?)

// 절대 이런 함수를 만들지 마
int& Test()
{
	int a = 0;
	// 지역 변수를 반환?
	// 지역 변수는 함수가 끝나면 사라짐
	return a;
}

// 절대 이런 함수를 만들지 마2
int* Test2()
{
	int a = 0;
	// 지역 변수를 반환?
	// 지역 변수는 함수가 끝나면 사라짐
	return &a;
}

int main()
{
	// ==포인터==
	// 주소를 담는 바구니
	// 진퉁은 저~ 멀리 어딘가에 있음
	// p는 단지 그 곳으로 워프하는 포탈
	int* p;

	// ==배열==
	// 진짜배기! 원조 데이터
	// 닭장처럼 데이터의 묶음 (엄청 많고 거대함)
	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };


	// 그런데 배열 == 포인터 라고 착각하는 경향이 많음

	// [배열의 이름]은 배열의 시작 주소를 가리키는 TYPE* 포인터로 변환 가능!
	p = arr;

	// [TYPE형 1차원 배열]과 [TYPE*형 포인터]는 완전히 호환 된다.
	//cout << p[0] << endl;
	//cout << arr[0] << endl;
	//cout << *p << endl;
	//cout << *arr << endl;
	//cout << *(p + 1) << endl;
	//cout << *(arr + 1) << endl;

	// == 2차원 배열 vs 다중 포인터 ==
	int arr2[2][2] = { { 1, 2 }, {3, 4} };

	// int** pp = arr2; // 오류! 
	int** pp = (int**)arr2; // 강제로 형변환?? -> 2차원 배열의 시작 주소를 2차원 배열의 주소로 변환
	cout << arr2 << endl; // -> 2차원 배열의 시작 주소
	cout << *arr2 << endl; // -> 1차원 배열의 시작 주소
	cout << **arr2 << endl; // -> 1차원 배열의 첫번째 원소?
	cout << pp << endl; // -> 2차원 배열의 시작 주소?
	cout << *pp << endl; // -> 1차원 배열의 시작 주소? X -> 1출력
	//cout << **pp << endl; // -> 1차원 배열의 첫번째 원소? X -> 1이라는 주소로 이동

	// 그럼 어떻게?
	// 포인터의 배열 vs 배열의 포인터
	// 참고로 이런거 써먹을 일 없음
	int(*p2)[2] = arr2; // 2는 2개짜리 1차원 배열을 가리키는 포인터
	cout << (*p2)[0] << endl;
	cout << (*p2)[1] << endl;
	cout << (*(p2 + 1))[0] << endl;
	cout << (*(p2 + 1))[1] << endl;

	cout << p2[0][0] << endl;
	cout << p2[0][1] << endl;
	cout << p2[1][0] << endl;
	cout << p2[1][1] << endl;

	int test = Test();
	cout << "TEST: " << test << endl; // 결과가 잘 나올수도 있음 근데 이건 운이 좋은거

	return 0;
}
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.