컴퓨터공학/자료구조

3. 배열과 구조체

주정용 2019. 5. 23. 22:42
728x90

배열(Array)

  • 같은 자료형의 데이터를 여러개 만들 때 사용
  • 배열을 이용하면 연속적인 메모리 공간에 데이터들을 저장할 수 있음
  • 각 데이터에는 인덱스를 이용하여 접근

ADT

Array

객체 : <index, value> 쌍의 집합

연산 :

  • create(n) : n개의 요소를 저장할 수 있는 배열
  • get(A, i) : 배열 A의 i번째 요소 반환
  • set(A, i, v) : 배열 A의 i번째 위치에 v 저장

구조체(Structure)

  • 배열 : 같은 타입의 데이터 모임
  • 구조체 : 다른 타입의 데이터 묶음
  • struct를 이용하여 형성

 

예제

 

형식

struct 구조체이름 {

    int a;

    float b[10];

    char name[20];

};

 

구조체 변수 생성

struct 구조체이름 구조체변수;

 

구조체 타입 선언

typedef struct {

    char name[10];

    int age;

    float gpa;

} student;

 

중괄호를 이용하여 초기화

student A = {"Jeongyong", 20, 4.15};


포인터(Pointer)

  • 다른 변수의 주소를 가지고 있는 변수
  • 모든 변수는 메모리 공간에 저장되고, 각 바이트에는 주소가 지정되어 있음 -> 이 주소가 포인터에 저장
  • 포인터 변수는 화살표로 표현 : '->'
  • 컴퓨터 메모리는 바이트로 구성되고, 각 바이트는 순차적으로 주소를 가짐

포인터 관련 연산자

& : 변수의 주소를 추출하는 연산자, 주소 연산자

* : 포인터가 가리키는 공간에 값을 저장하는 연산자, 간접참조 연산자(역참조 연산자)

 

++

배열의 이름은 배열의 시작위치를 가리키는 포인터이다.

컴파일러는 배열의 이름이 있는 공간을 배열의 첫번째 요소의 주소로 대치한다.

배열의 이름이 포인터이기 때문에 &연산자를 사용하지 않고 배열 이름을 바로 사용할 수 있는 것이다.


동적 메모리 할당(Dynamic Memory Allocation)

  • 메모리 공간 낭비를 억제하기 위한 방법
  • 필요한 만큼 메모리를 운영체제로부터 할당받아 사용 가능
  • 사용 후 시스템에 메모리 반납이 가능

힙(Heap)

  • 운영체제가 사용하지 않는 공간을 모아놓은 곳
  • 동적 메모리 할당이 이뤄지는 곳
  • 동적 메모리 할당에서 필요한 만큼 할당하고, 반납받기 때문에 메모리 효율성이 증가

예제

int *dma;

dma = (int *)malloc(sizeof(int));   //동적 메모리 공간 할당

*dma = 1995;                                //할당받은 공간 사용

free(dma);                                    //동적 메모리 공간 반납