본문 바로가기
C

C언어에서 배열을 어떻게 다룰까?

by oncerun 2023. 4. 17.
반응형

 

c언어에서 배열을 선언하게 되면 그 배열의 각 요소를 위한 기억공간이 연속해서 할당된다. 

 

int array [5]라는 1차원 배열을 선언하게 되면 int 형 변수 5개가 모여 구성되는 array라는 이름의 기억공간을 가진다는 것을 말한다. 

 

C언어서 배열의 이름은 배열의 시작 주소가 저장된다는 점을 기억해야 한다. 

 

즉 별도의 첨자 []가 없는 array라는 자체 값은 array [0]의 주소(&array [0])이다. 

 

배열명인 array 자체는 int형 포인터와 같다. 

 

어떤 기억 클래스를 가지는지에 따라 저장공간이 달라질 수 있지만 int arrray[5]는 4 byte * 5인 20byte 공간을 차지하고 기억공간에 연속적으로 위치하고 있을 것이다. 

 

 

타 언어와 같이 배열의 선언과 초기화를 동시에 진행한다면 다음과 같이 진행한다.

 

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

 

 

외부로 부터 자료를 입력받아 초기화하는 방법도 알아두자. 

 

int main() {

    int x[10];

    for(int i = 0; i < 10; i++){
        scanf("%d", &x[i]);
    }

    for(int i = 0; i < 10; i++){
        printf("%d ", x[i]);
    }

}

 

앰퍼센트 &는 주소공간을 말한다. 배열의 인덱스에 따른 주소공간에 접근할 수 있도록 주소값을 전달하는 것으로 설계되었나 보다. 

 

 

나는 배열을 매개변수로 사용하는 경우 어떠한 방법으로 넘겨야할지 헤매었다. 

 

다음 예제를 보자. 

 

 

#include <stdio.h>

int number_sum(const int numbers[], int);

int main() {

    int numbers[5] = {1, 2, 3, 4, 5};
    int result = number_sum(numbers, 5);
    printf("Sum: %d", result);

    return 0;
}

int number_sum(const int numbers[], int size){
    int sum = 0;
    int i;
    for (i = 0; i < size; i++) {
        sum += numbers[i];
    }
    return sum;
}

 

 

솔직히 왜 함수의 원형을 상단에 적어야 하는지 이러한 불편함을 감수하는지는 잘 모르겠다. 

더욱이 위에 선언된 원형은 가히 충격적인데, 두 번째 매개변수에 타입만 정의하는 것은 무엇일까..

 

 

우선 함수의 매개변수로 사용할 때 주의해서 보아야할 것은 다음과 같다.

 

* 배열 전체를 함수의 매개변수로 전달하는 경우 첨자를 빼고, 배열명만 명시한다. 

 

배열이 매개변수로 전달될 때는 배열의 값이 복사되는 것이 아닌, 배열의 주소만 전달한다. 

 

즉 참조에 의한 자료 전달이다. 

 

 

다차원 배열을 볼 때 C언어의 특징은 행만 표시하는 경우 int[3][4]에서 int [0], int [1], int [2]만 표시하게 되면 이는 논리적으로 다차원 배열의 행에 해당하는 시작 주소를 가진다는 것을 기억하자. 

 

 

 

char형의 배열과 문자열

 

C언어에서는 문자열에 대한 자료형이 없다고 한다. 

 

따라서 문자열을 처리하려면 char형 배열을 사용하거나 포인터를 사용한다고 한다. 

 

우선 char형 배열을 사용해보자. 

 

C언어에서 문자열은 " "로 묶인 문자 나열을 말하며 이러한 문자열을 C언어에서는 특수한 배열로 취급한다. 

 

"ABCD"라는 문자열은 공백까지 포함한 5개의 요소로 구성된 문자배열이라 할 수 있다. 

즉 문자열 마지막 부분에 null문자인 '\0'을 자동으로 삽입한다. 

 

그래서 보통 char array [문자열 길이 + 1]로 초기화를 한다. 

 

여기서 한글을 사용하는 경우 우리는 한글이 2byte를 표현한다는 것을 기억해야 한다. 

 

"안녕"이라는 문자열을 저장하려면 우리는 char array [5]로 초기화를 해야 한다. 

 

 

 

 

 

 

 

 

 

반응형

'C' 카테고리의 다른 글

구조체  (0) 2023.05.01
포인터와 배열.  (0) 2023.04.29
포인터  (0) 2023.04.29
입력 및 출력 프로그램  (0) 2023.04.16
3D Computer Graphics (3)  (1) 2023.04.08

댓글