C언어 5일차

정혜창·2024년 12월 18일

독학

목록 보기
12/28
post-thumbnail
  • 머릿말

캠프 2일차. 아직까진 괜찮은데 내일 블루프린트라는 약간 어려운 개념을 배우는 날이라 좀 겁이나기도 한다. 하루 12시간 캠프이기에 이렇게 독학을 시작할 때면 항상 밤12시가 지나있다. 하지만 간단하게라도 오늘의 공부를 진척하고자 한다.

자 드디어 대망의 배열과 포인트 챕터이다. 5일만에 이렇게 빠르게 진도를 뺀 것이 뿌듯하기도 하다. 앞으로 조금만 힘을 내서 C++수업을 들어가기 전에 C언어 기본편을 끝내보자.


이 글은 '혼자 공부하는 C언어 -서현우(2023)' 을 토대로 공부한 글입니다.

배열

동일한 자료형을 저장할 저장 공간이 많이 필요한 경우 일일이 변수를 선언하면 적지 않은 품이 든다. 이때 이 문제를 해결하기 위해 '배열'을 사용하는데, 배열을 사용하면 많은 변수를 하나의 선언문으로 간단하게 대체할 수 있다. 이번 챕터에서는 배열을 만들고 사용하는 방법에 관해 알아보자

1. 배열의 선언과 사용

지금까지 메모리에 저장 공간을 확보할 때 변수를 선언했다. 하지만 변수가 매우 많다고 가정했을 때 일일이 하나씩 변수를 선언하는 것은 곤란한 일이 아닐수 없다. 그래서 우리는 같은 형태의 많은 데이터를 반복문으로 처리하기 위해서 메모리에 연속적으로 저장해 놓고 쪼개서 사용하는 방법을 사용한다. 이를 배열(array) 이라고 한다.

배열의 선언

배열 또한 다른 자료형처럼 선언을 통해서 저장 공간을 확보한다. 다만, 기존처럼 변수를 하나씩 선언하지 않고, 하나의 이름으로 한꺼번에 확보한다. 또 저장 공간의 개수와 관계없이 이름은 하나만 사용한다.

배열을 선언하는 방법은 간단하다.

int ary[5];

여기서 int는 자료형, ary는 배열명, 5는 요소 개수 이다.
예제로 확인해보자

  • 5명의 나이를 저장할 배열을 선언하고 사용하는 방법(예제)
#include <stdio.h>

int main(void)
{
	int ary[5];					// int 형 요소 5개의 배열 선언
    
    ary[0] = 10;				// 첫 번째 배열 요소에 10대입
    ary[1] = 20;				// 두 번째 배열 요소에 20대입
    ary[2] = ary[0] + ary[1];	 
    scanf_s("%d", &ary[3]);		// 키보드로 입력받아 네 번째 요소에 저장
    
    printf("%d\n", ary[2]);		// 세 번째 배열 요소 출력
    printf("%d\n", ary[3]);
    printf("%d\n", ary[4]);		// 마지막 배열 요소는 쓰레기 값

	return 0;
}

여기서 int ary[5]; 가 배열 선언문이다. int형 변수 5개를 하나씩 선언하는 것과 전체 저장 공간의 크기는 같다. 그러나 메모리에 할당되는 방식에 차이가 있다.

변수를 선언하면 각 변수는 독립적인 저장 공간을 가지며 각각의 이름을 사용한다.

반면에 배열은 저장 공간이 연속으로 할당되며 배열명이 전체 공간의 이름이 된다.

int형 변수는 크기가 4바이트 이므로 5개를 연속으로 할당하면 총 20바이트가 할당된다. 배열의 나누어진 조각을 배열 요소 라고 하는데, 각각의 배열 요소는 int형 변수와 똑같이 사용한다. 배열 요소는 배열명에 첨자(index)를 붙여 표현하며 첨자는 0부터 시작한다.

배열의 사용

배열을 선언할 때와 배열 요소를 사용할 때 대괄호( [ ] )속 숫자의 의미는 다르다. 선언할 때는 배열 요소의 전체 개수를 표시하며, 사용할 때는 각요소가 배열에서 몇 번째에 있는지를 의미한다. 이 값이 첨자(배열에서의 위치)며, 배열의 첨자는 0부터 시작하므로 최대 '배열 요소 개수-1' 까지만 사용한다.



배열 초기화

배열도 변수와 마찬가지로 최초 할당된 저장 공간에는 쓰레기 값이 저장되어 있다. 그러므로 배열도 원하는 값을 가지려면 선언과 동시에 초기화해야 한다. 배열은 중괄호({ })로 묶어서 초기화 한다.

  1. 기본적인 초기화 방법
int ary[5] = {1,2,3,4,5};
  1. 초깃값이 배열 요소의 개수보다 적은 경우
int ary[5] = {1,2,3} // 이때는 왼쪽부터 차례로 초기화 남은 요소는 '0'으로 채움
  1. 자동 초기화 기능을 사용할 수도 있다.
int ary[1000] = {0};
  1. 배열 요소개수가 생략된 형태도 있다.
int ary[] = {1,2,3};

이 경우 컴파일러는 초깃값 개수만큼 배열 요소 개수를 정하고 저장 공간을 할당한다.

  1. double형 배열과 char형 배열을 선언하고 초기화한다.
double ary[5] = {1.0, 2.1, 3.2, 4.1, 5.12};
char ary[5] = {'a','p','p','l','e'}

배열의 초기화는 선언 시 최초 한번만 가능하다. 그 이후에는 배열 요소에 일일이 값을 대입해야 하며, 초기화 때처럼 중괄호({ })를 사용한 대입 연산으로 한 번에 바꾸는 것은 불가능하다.


배열 반복문

연속된 저장 공간을 할당하고 초기화할 수 있어 같은 유형의 변수가 많이 필요할 때 배열을 사용한다고 했습니다.

profile
Unreal 1기

0개의 댓글