혼자 공부하는 C - 배열





배열의 선언과 사용

배열의 선언


1
int array[5]; // 자료형 배열명[요소 개수];

array라는 배열을 선언하고 원소의 개수를 5개로 지정하였습니다. int형은 크기가 4바이트 이므로, 이 배열의 크기는 4*5 인 20이 됩니다 (5개의 int를 선언한것과 같은 크기를 가집니다)

5개의 원소는 index를 사용해 각 원소를 얻을 수 있습니다.

array는 [element, element, element, element, element] 으로 이루어져있고, 첫 번째 부터 0~4로 indexing을 통해 얻을 수 있습니다.

배열의 원소는 다음처럼 사용합니다


1
array[0] = 10; // 1번째 원소를 10으로 지정함

배열의 값을 지정하지 않았다면, 해당 원소는 garbage value를 가집니다.

몇 가지 배열을 초기화하는 방법은 아래와 같습니다.


1. 기본적인 방법


1
int array[5] = {1,2,3,4,5};

2. 초기값이 배열 요소의 개수보다 적은 경우


1
int array[5] = {1,2,3};

이 경우 차례로 1,2,3을 채우고 나머지는 0으로 채우게 됩니다.


3. 자동 초기화

1
int array[1000] = {0};

4. 배열의 원소개수가 생략되는 경우

1
int array[] = {1,2,3};

이 경우, 초기값의 개수만큼 array의 개수를 확보한다.


5. 다른 변수 타입으로 선언하고 초기화

1
2
double array[5] = {1.1, 2.4, 3.6, 3.2, 1.2};
char array[5] = {'a', 'p', 'p', 'l', 'e'};

배열은 연속으로 저장곤간을 할당하고 초기화 할수 있으며, 반복적인 작업을 할 때에 반복문을 사용하면 편리합니다.

예를 들어, 아래는 반복문을 이용해 scores라는 array의 0부터 4번째 원소를 scanf로 받아 지정하는 코드입니다.


1
2
3
4
5
int scores[5];
for (i = 0; i < 5; i++)
{
scanf("%d", &scores[i]);
}

sizeof 연산자는 자료형의 크기를 바이트 단위로 알려주는 함수입니다.

예를 들어 int형의 경우 4를, int가 5개로 이루어진 array의 경우 20을 반환합니다.

array의 원소하나의 크기를 알 수 있으므로, sizeof연산자를 사용하면 배열의 길이를 알 수 있습니다


1
2
int scores[5];
count = sizeof(scores)/sizeof(scores[0]); //배열의 크기 / 배열 원소 하나의 크기



문자를 저장하는 배열

문자열을 저장하기 위해서는 배열을 사용해야하며,
알파벳 문자는 1바이트로 표현할 수 있으므로 char 형 배열을 사용하는 것이 좋습니다.

기억해야 할 것은, 지정할 문자열의 길이보다 최소한 하나 더 크게 배열을 선언해야합니다.

예를 들어, apple을 배열에 저장한다면 최소 6개의 길이로 지정해야 합니다.

이는 널 문자 (null character)인 \0를 저장하기 위해서입니다.


1
char str[6] = "apple";

위 처럼 “apple”을 지정하면 남은 1개의 원소는 널 문자 \0 이 채워집니다.

⭐ 널 문자는 문자열의 끝을 표시하는 용도로 사용됩니다.

위 str를 printf로 출력하면 apple만 출력되는 이유는 끝에 널문자가 있기 때문입니다.


1
scanf("%s", str); // "app" 입력

위 코드를 진행하고 “app”을 입력하면 str 변수에는 새로 “app”이 앞부터 순서대로 입력되며 4번째에 널문자가 자동으로 저장됩니다.



char 배열 선언시 주의점

  1. 배열의 크기는 최대한 넉넉하게 선언해야한다.
  2. 배열 원소의 개수는 최소한 “문자열 길이 + 1” 이어야 한다.



strcpy 함수

선언된 char 형 배열에 문자열을 새로 대입할 수 있으나, 문자열의 길이가 다르면 대입 연산자 (=)를 사용하는 것은 불가능합니다. 이 때, strcpy를 사용합니다.

사용 방법은 아래와 같습니다.


1
strcpy(배열명, 저장할 문자열);

1
2
char str[10] = "cat";
stcpy(str, "tiger"); // str 변수에 "tiger"를 대입.



gets, puts 함수

gets 함수는 scanf 함수처럼 입력되는 문자열을 입력할 수 있습니다.

차이점은 gets함수는 빈칸 (스페이스)도 입력이 가능합니다.

또한 이 함수와 같이 사용되는 puts 함수도 있습니다.

설명하자면,

  • gets 함수는 char 형의 배열명을 받아서, 문자열을 입력하는 함수입니다.
  • puts 함수는 char 형의 배열명을 받아서, 문자열을 출력하는 함수입니다.

예시


1
2
3
4
char str[80];

gets(str); // 입력 -> Love is belief...
puts(str); // 출력 -> Love is belief...



오늘은 C언어에서 Array를 사용하는 방법을 정리해보았습니다. 감사합니다 ~ 👋👋