본문 바로가기
C++

[C++] 배열, 구조체

by arirang_ 2023. 2. 23.

배열 

- 자료형을 묶음으로 표현

- 동일한 자료형으로 변수를 한번에 여러개 할당하고 싶을 때

int iArray[10] = { };         //다 0

int형 10묶음!

 

- 배열에서 개별요소로 접근하는 방법 (인덱스 접근)

iArray[4] = 10;       //5번째 요소

- 선언 뿐만이 아니라 초기화도 할 수 있다 (초기화되지 않은 것들은 다 0)

int arr[10] = {1,2,3,4,5,6 } //나머지는 0

 

 

- 배열은 메모리가 연속적인 구조이다!!

                   

- 배열을 초과해서 접근하면 우연치 않게 다른 변수의 값이 생뚱맞게 들어갈 수 있다!!

- 배열을 초과해서 접근하면 안된다!!! 

 

 

구조체(struct)

- 사용자 정의 자료형 (User Define DataType) 

- typedef 는 type define이라는 뜻

- 내가 자료형을 내 방식대로 새로 만들고 싶을 때 (내 코드에서만 적용됨, 통함)

  → 나만의 자료형 커스텀

- 내가 내 마음대로 자료형을 만듦 (자료형 새롭게 디자인)

 

//사용자 정의 자료형
typedef struct _tagMyST{
   int a;
   float f;
}MYST;

int main() {
   //구조체
   MYST t;
   
   
   return 0;
}

- 그럼 t의 자료형 크기는 얼마나 될까?

  → 8byte 

//자료형의 크기 알고 싶을 때 : sizeof() 사용
int iSize = sizeof(MYST);       //8byte

- MYST에는 int 파트도 있고 float 파트도 있다. 

  그럼 세부적인 요소로 접근하고 싶다면? int 또는 float로..!

 

- 내가 선언한 변수의 세부적인 내용에 접근할 때

//사용자 정의 자료형
typedef struct _tagMyST{
   int a;
   float f;
}MYST;

int main() {
   //구조체
   MYST t;
   t.a = 10;
   t.f = 10.2312f;
   
   return 0;
}

 

- 내가 만든 자료형이 내가 또 만든 자료형의 부분이 될 수도 있다. (구조체도 계속 확장될 수 있다)

//사용자 정의 자료형
typedef struct _tagMyST{
   int a;
   float f;
}MYST;

//사용자 정의 자료형
typedef struct _tagBig{
   MYST t;
   int i;
   char c;
}Big;

 

- 타입을 재정의할 수도 있다. (타입의 새로운 이름부여 가능)

typedef int INT;    //int를 INT로 사용해도 int 자료형으로 인식함. (int의 새로운 이름이다!!)

 

 

- 구조체 선언할 때마다 매번 struct 붙이기 번거로움

struct NewStruct{
  int a;
  short s;
}


int main(){


   struct NewStruct a;      //NewStruct 타입의 변수를 a라고 하나 설정하겠다!
   struct NewStruct b; 
}

 

 

 

- 사용할 때마다 struct를 계속 붙이는 것이 번거롭기 때문에 "큰 이름"을 한번 더 부여한 것이다!! (새로운 이름을 준다)

(typedef- 타입을 새롭게 정의한 것이다)

typedef struct NewStruct{
  int a;
  short s;
}NEWST;


int main(){


  NewStruct a;      //struct를 사용하지 않고도 a라는 변수 선언 가능
 
}

 

- 구조체를 선언 뿐만 아니라 초기화도 할 수 있다.

MYST t = {100, 3.14f};

 


참고 영상

https://www.youtube.com/watch?v=Nrtg_YSqwu4&list=PL4SIC1d_ab-aOxWPucn31NHkQvNPHK1D1&index=22