5일차 데일리 과제

IIRU·2026년 5월 20일

C++에서 배운 내용 중에 2가지를 골라 자신만의 언어로 설명하기

< 포인터 >

포인터를 사용하는 방법은 변수에 *을 붙이는 방법입니다.

int num = 10;
int* numPtr = &num; //numPtr이라는 포인터 변수를 선언하고 num의 주소를 저장

위의 코드를 설명하자면 num이라는 변수가 있으면 numPtr은 num의 주소를 저장하고 있다는 뜻입니다.

(num변수 앞에 &를 쓰게되면 그 변수의 주소를 뜻합니다.)

cout << *numPtr << endl; //주소에 저장된 값 = num 안에 들어있는 값
cout << numPtr << endl; //이건 num의 주소값을 출력

그럼 *numPtr을 출력하면 저장하고 있는 주소 값을 출력하나요? 라고 생각할 수 있는데요.

변수 앞에 * 이 붙어있을 경우 그 변수에 저장되어있는 주소의 값을 출력합니다.

cout << &num << endl; //num의 주소값
cout << numPtr << endl; //num의 주소값
cout << *numPtr << endl; //num의 값 = 10

< 배열 - 포인터 >

int arr[5]; //5칸의 배열 arr선언

for (int i = 0; i < 5; i++) { 
	arr[i] = i; //arr에 값넣어주기
	cout << arr + i /* == &arr[i]*/ << endl;
}

위 코드에서

cout << arr[i] << endl;
cout << arr + i << endl;

arr 안의 값을 출력하기 위해서는 arr[ i ]를 출력 해주어야 합니다. 그렇다면 아래 있는 코드는 무엇을 출력할까요?

아래의 코드는 arr[ 0 ]의 주소 값을 출력하게 되는데요. 그럼 주소 값에 +1 ,+2를 하게 된다면 주소 값에 단순히 1과 2가 더해져서 나올까요?

아닙니다. 주소 값에 1을 더하게 되면 int로 정의된 배열에서 1칸은 4byte 즉, 4칸을 차지하고 있습니다. 그렇기 때문에 1을 더해주면

arr[ 1 ] 의 주소 값을 출력하게 되고, arr[ 0 ]의 주소 값보다 4가 큰 것을 볼 수 있습니다.

예제로 한번 보겠습니다.

//예제 - 뭐가 출력되는지 알아야함
cout << arr << endl;       //00000017864FF838
cout << &arr[0] << endl;   //00000017864FF838
cout << &arr[1] << endl;   //00000017864FF83C

cout << arr << endl;       //00000017864FF838
cout << arr + 0 << endl;   //00000017864FF838
cout << arr + 1 << endl;   //00000017864FF83C

cout << *arr << endl;      //0
cout << *(arr + 0) << endl;//0
cout << *(arr + 1) << endl;//1

( 출력 값은 제 컴퓨터 위주로 작성되어 있습니다.)

위 주석에 적힌 대로 출력이 되는 것을 볼 수 있습니다.

이로써 &arr[ i ] == arr + i 것을 알 수 있습니다.


< 구조체 >

구조체는 struct를 사용해서 만들 수 있습니다.

//구조체
struct Avatar {
	string name;
	int level;
	int hp;
	
	//생성자
	Avatar(string _name, int _level, int _hp) {
		name = _name;
		level = _level;
		hp = _hp;
	}

};

구조체는 여러가지 자료형을 가진 변수들을 하나로 묶어서 관리할 수 있습니다.

Avatar라는 구조체를 만들기 위해서는 생성자라는 것이 필요하게 되는데

생성자로 다른 함수나 메인함수에서 구조체를 선언하여 변수처럼 사용할 수 있게 해줍니다.

Avatar player = { "이름" , 1, 100 };
Avatar pet("펫", 1, 50);

위와 같이 만들 수 있습니다.

profile
초보 개발자 블로그입니다!

0개의 댓글