본문 바로가기
Computer Science

[C언어] 배열 기초개념과 포인터로 배열 참조하기

by DuncanKim 2022. 7. 1.
728x90

[C언어] 배열 기초개념과 포인터로 배열 참조하기

 

C언어의 변수와 포인터를 알았다면, 이제 배열에 대해 알아나가고 배열을 활용하여 자료구조도 공부하고 데이터도 공부하고... 막 그러는 것이 아닐까 싶다. 생기초를 들여다 보았다면, 배열부터는 이제 정말 기초 개념이라고 할 수 있다. 아래에서는 배열을 사용하는 이유포인터로 배열을 참조하는 방법, 그리고 C언어의 배열이 메모리를 어떻게 사용하는 지에 대해 알아볼 것이다.

 

(배열 문법을 사용하는 것은 여타 다른 언어들과 다른 점이 거의 없기 때문에 다루지는 않을 것이다.)

 

 

✏️ 배열을 사용하는 이유

  • 순서있는 데이터 관리
  • 관련된 데이터를 모아서 관리
  • 변수 1개로 공간 여러 개를 컨트롤 할 수 있다.
  • index로 접근하여 빠르게 탐색을 할 수 있다.

 

✏️ 포인터로 배열 참조하기

배열은 보통 arr[인덱스번호] 를 활용하여 값을 참조하지만, C언어의 배열은 포인터를 활용하여 내부의 값들을 참조할 수 있다.

아래에서는 포인터를 가지고 최대값을 출력하는 코드를 만들어 보았다.

 

// 문제 : main 함수 안에있는 int 변수의 값들 중 최대값을 출력해주세요.
// 조건 : 변수 a0만 사용 가능

#include <stdio.h>

int main(void) {
  int a9, a8, a7, a6, a5, a4, a3, a2, a1, a0;

  a0 = -10;
  a1 = 10;
  a2 = 100;
  a3 = 210;
  a4 = 322210;
  a5 = 1440;
  a6 = 1130;
  a7 = 33210;
  a8 = 1210;
  a9 = 33210;

  // 반복문과 변수 a0 사용 가능
  int max_number = 0;
  // 수정가능지역 시작
  for(int i = 0; i < 10; i++){
    if(*(&a0 + i) >= max_number){
      max_number = *(&a0 + i);
    }
  }
  // 수정가능지역 끝
  printf("최대값은 %d 입니다.\\n", max_number);
  return 0;
}

 

✏️ 배열은 어떻게 메모리를 사용하는가?

 

배열을 선언할 때, 배열 전체가 담길 곳의 변수명을 입력한다.

예를 들어 int형이 담기는 배열 arr이 공간을 5개 가지도록 생성한다고 할 때, 다음과 같이 선언한다.

int[] arr = new int[5];

이 경우, ‘arr’ 이라는 헤드 포인터가 생기는데, 전체 메모리는 28바이트가 된다.

int형 5개만을 계산하는 것이 아니라, 첫번째 인덱스를 가리키는 포인터 상수가 하나 더 생기고, 그것을 활용해서 배열을 검색하고, 새로운 값을 입력하게 된다.

배열은 당연하게도 메모리의 스택 영역에 위치하게 된다.

728x90

댓글