Pointer #3

Kimbab1004·2024년 2월 9일
0

CPP

목록 보기
4/27

기존 배열을 Pointer를 통해 이용하는 법을 학습하였다.

#include <iostream>
#include <deque>
#include <string>
#include <sstream>
#include <vector>
#include <string>
#include <queue>

struct Statinfo {
	int hp = 4;
	int attack = 8;
	int defence = 12;
};

int main(void) {

	//TYPE 이름[개수]
	const int monsterCount = 10;
	Statinfo monsters[monsterCount]; //배열에 사용할려면 "상수"이여야 한다.

	Statinfo players[10];
	
	//문법적 오류다.
	//players = monsters;

	// 타입을 추론해서 맞는 타입을 지정해주는것.
	//배열 = 시작위치를 가르키는 포인터
	auto WhoAmi = monsters;

	//Statinfo [100,10,1] Statinfo [] Statinfo [] Statinfo [] Statinfo [] Statinfo [] ...
	Statinfo* monster_0 = monsters;
	//monsters의 첫번째 배열 값 건들인다.
	monster_0->hp = 100;
	monster_0->attack = 10;
	monster_0->defence = 1;

	//포인터의 덧셈은 진짜 1을 더하라는 것이 아니라 statinfo 타입 바구니 한개씩 이동하라는 의미이다.
	monsters + 1;

	//Statinfo [100,10,1] Statinfo [200,20,2] Statinfo [] Statinfo [] Statinfo [] Statinfo [] ...
	Statinfo* monster_1 = monsters + 1;
	//monsters의 첫번째 주소 + 1 값 건들인다.
	monster_1->hp = 200;
	monster_1->attack = 20;
	monster_1->defence = 2;


	//reference이기때문에 . 사용해야한다.
	Statinfo& monster_2 = *(monsters + 2);
	monster_2.hp = 300;
	monster_2.attack = 30;
	monster_2.defence = 3;

	//위 아래는 다른 의미

	Statinfo temp = *(monsters + 2);
	//주소 값을 temp에 복사해서 하는 것이기때문에 monsters 의 주소 체계에는 상관이 없다.
	temp.hp = 300;
	temp.attack = 30;
	temp.defence = 3;

	//이를 자동화 한다.
	for (int i = 0; i < 10; i++) {
		Statinfo& monster = *(monsters + i);
		monster.hp = 100 * (i + 1);
		monster.attack = 10 * (i + 1);
		monster.defence = (i + 1);
	}

	//*(monsters+i) = monsters[i] 같은 의미

	//위 방식은 포인터를 이용하는 거고 실제로 사용할때는 그냥 인덱스를 사용하면된다.


	return 0;
}

0개의 댓글