C-language

[C언어] 배열 array

전자둥이 2022. 7. 27. 00:33
반응형

안녕하세요

전자둥이입니다.

이번 시간에는 배열에 대해서 간단히 설명하고자 합니다.

* 배열을 사용하는 이유 : 동일한 성격의 데이터를 다수 표현할 수 있습니다.

제일 이해하기 쉬운 건 직접 배열을 선언하고 실제 코드에서 사용을 해보면 좋습니다.

바로 Code 보면서 설명해드리겠습니다.

 

1. 초기화를 하며 배열을 선언

 

int arr[8] = {3,6,8,3,4,7,3,4};

배열

이해하기 쉽도록 위에서 선언한 배열을 그림으로 표현해봤습니다.

- 배열은 인덱스 번호가 0번부터 시작됩니다.

- 배열 선언할 때 arr[8] 여기서 8은 배열의 총크기를 말합니다. -> 인덱스 번호는 0번부터 시작하기 때문에 총 크기를 8로 선언했을 때 마지막 인덱스 번호는 7이 됩니다.

- int 형의 배열을 선언하였기에 해당 배열의 총크기는 4*8 = 32 , 즉 32byte의 크기를 가진 배열이라고 할 수 있습니다.

 

*Code

#include <stdio.h>

int main(void){
	int arr[8] = {3, 6, 8, 3, 4, 7, 3, 4};
    for (int i = 0; i < 8; i++){
    	printf("%d ", arr[i]);
    }
  return 0;
}

실행 결과

위에 코드를 실행해보면 다음과 같이 배열에서 순차적으로 값을 읽을 수 있습니다.

 

2. 초기화를 하지 않고 배열 선언

위에 예시에서는 특정 값들을 선언하여 배열을 초기화를 진행했습니다.

만약, 배열 초기화를 진행하지 않으면 어떤 값들이 읽히는지 알아보겠습니다.

 

*Code

#include <stdio.h>

int main(void){
    int arr[8];
    for (int i = 0; i < 8; i++){
    	printf("%d ", arr[i]);
    }
  return 0;
}

결과물

위에 코드를 실행해보면 다음과 같이 배열을 초기화하지 않아 쓰레기 값들이 들어가 있음을 확인할 수 있습니다.

따라서 배열을 사용할 때는 꼭 초기화와 함께 선언하는 것을 추천드립니다.

*참고로 배열의 모든 값을 0으로 선언을 하기 위해서는

ex) int arr[8] = {0,}; //다음과 같이 선언을 하면 됩니다.

 

3. 배열 크기를 넘어서서 파싱 했을 때는?

선언한 배열크기를 넘어서서 값을 파싱 하게 되면 어떤 결과를 초래하게 될까요?

우선 실행부터 해보겠습니다.

 

*Code

#include <stdio.h>

int main(void){
    int arr[8] = {0,};
    for (int i = 0; i < 10; i++){
        printf("%d번째 값: %d ", i, arr[i]);
        printf("%d번째 주소: %p \n", i, &arr[i]);
    }
    return 0;
}

결과물

실행 시 에러가 발생할 거 같지만 예상과는 다르게 에러는 발생하지 않습니다.

인덱스 번호 7번까지는 0으로 값을 초기화 잘 되어있지만 8번째부터는 쓰레기 값들이 읽히는 것을 확인할 수 있습니다.

따라서 배열을 사용하실 때 선언한 배열 크기 그 이상을 파싱 하지 않도록 주의를 하셔야 합니다.

 

 

배열의 원소 중에서 최댓값 찾기

지금까지 알아본 배열을 사용하여 간단한 알고리즘인 배열의 원소 중에서 최대값 찾기를 한번 해보려고 합니다.

바로 Code 보면서 설명을 하겠습니다.

 

*Code

#include <stdio.h>
#include <limits.h>

int main(void){
  int arr[8] = {3, 6, 8, 3, 4, 7, 3, 4};
  int i, MaxValue = INT_MIN;
  for (int i = 0; i < 8; i++){
    if (MaxValue < arr[i]) MaxValue = arr[i];
  }
  printf("MaxValue : %d\n", MaxValue);
  return 0;
}

결과물

limits.h를 선언하여 INT_MIN값을 사용해봤습니다. INT_MIN은 signed int형이 가질 수 있는 가장 작은 값입니다. 

생각보다 간단하죠?

여기에 언급한 예제 코드들을 직접 작성하여 실행해보는 것을 추천드립니다.

긴 글 읽어주셔서 감사합니다.

반응형