[c++] 배열, 구조체

TNT·2024년 2월 24일
0

c++ 기초

목록 보기
4/17

이번엔 배열이다.
배열을 사용한다면 보통 포인터 개념도 같이 알아야하지만 나중에 다시 작성하고
지금은 배열만 설명한다.

배열의 특징으로는 메모리의 연속성이다.
배열은 같은 자료형만 넣을수있다

1. 배열

#include <stdio.h>

int main() {

	int iArray[10] = { };
	iArry[4] = 10;
	return 0;
}

기본적인 배열 구조이다.=
int 자료형에 배열 크기는 10이고 iArray변수명로 지정 했다.
초기값을 줄수있지만 { } 으로 해두면 0으로들어간다

[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] 인 배열이 만들어진것이다.
그럼 배열 안에 하나 값을 10으로 변경하고싶을땐 iArry[n] 으로 지정 하면 된다.
여기서 4를 지칭했으면 4번째가 아니다. 왜냐면 배열에선 0부터 index가 시작 하기 때문에
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 로 10개 가 된다.
즉 항상 0부터 시작 한다는걸 생각하고 봐야한다.

만약에 실수로
10까지만 선언한 배열에서

#include <stdio.h>

int main() {

	int iArray[10] = { };
	iArry[12] = 10;
	return 0;
}

이렇게 접근할수 있는데 에러는 잡을수도있고 못잡을수도있다.
만약에 저런식으로 메모리 접근을 해버리면 다른 변수에 지장을 주기도 한다.
그 변수가 중요한 변수 였다면 큰 에러까지 날수도있다.
만약 재화와 관련된 변수였거나 레벨 같은 변수였다면 유저 한테 보이는 레벨이 서버랑 다른것이다.
만약 서버에서 이런 문제가 생기면 더 큰일나는경우도 있다.

2.구조체

구조체의 배열이랑 특징은 조금 다르다.
메모리의 접근 방식과 특징이 배열이랑 다른데
다양한 타입의 변수를 넣을수있다
구조체의 특징으로는 메모리의 연속성이다.

일단 선언 방법을 알아보자.

#include <stdio.h>

typedef struct _tagMyST {
	int age;
	float cm;
}MYST;

int main() {
	MYST t;

	t.age = 10;
	t.cm = 190.0f;
    
    MYST x = { 100, 3.14f };
    
	return 0;
}

보면 유저가 직접 자료형을 만들어서 사용한다고 비유를 해보면 될꺼같다
자료형으로 만들고 그 안에 있는 변수를 또 묶어서 사용한다.
만약 int와 float 형을 합친다면 이 _tagMyST 자료형은 메모리 크기가
int = 4 byte,
float = 4 byte
8바이트로 자료 형으로 사용하는것이다.

sizeof()라는 명령어로도 확인 가능하다.
자료형에 데이터를 넣고 싶을때 t.변수명 으로 넣어주면 된다.
이렇게 사용된 자료형은 구조체 이기 때문에 또다른 구조체 안에 넣을수도있다.
또는 배열 처럼 똑같이 {} 안에 자료형을 선언한 위에 부터 아래로 넣어 주면 된다.

#include <stdio.h>

typedef struct _tagMyST {
	int age;
	float cm;
}MYST;

typedef struct _tagBig {
	MYST k;
	int i;
	char c;
}BIG;

int main() {
	return 0;
}

이렇게 다른 구조체 안에 들어가서 사용될수도있다.

명령어를 하나 씩 풀어서 보자면
typedef 은 타입을 재정의 하는것이다.
typedef int INT; 이렇게 하면
이미 있는 int 형을 INT 형으로 써도
컴파일러에서는 INT = int 자료형으로 보는것이다.

어케보면 자료형에 별명 같은걸 지정해준거라고 생각할수도있는데
잘 기억해두자.

profile
개발

0개의 댓글