C언어 - 배열 1

Code April·2022년 5월 20일
0

C언어

목록 보기
2/9

C언어 코드 환경

  • Visual Studio Community을 사용했습니다.
  • Visual Studio Community 2019/Visual Studio Community 2022모두 사용 가능

배열은 동일한 자료형을 가지고 있는 데이터의 집합이라고 입니다.
연속적인 메모리블럭을 점유하고 있는 데이터들의 묶음으로 표현할 수도 있습니다.


  1. 배열의 필요성
    기존처럼 변수만을 사용할 경우, 한반의 학생들의 번호를 저장하기 위해서는
    그 학생수 만큼의 변수가 필요 합니다. 예를 들어 한반의 학생이 30명이라고
    하면 int id1,id2,id3,,,,,id30과 같이, 이렇게 선언을 해야하는 것이죠.
    이와 같은 경우 배열을 사용하면 아래와 같이 한번만 선언을 하면 됩니다.
    또한 데이터 연산을 할때도 30개의 변수를 다 사용해서 코딩한다는 것은
    엄두가 나질 않습니다.^^

    int student_index[30];


  1. 배열 초기화가 필요한 이유
    배열은 선언과 함께 초기화가 되어야 합니다.
    선언과 함께 초기화를 진행한 경우와 그러지 않은 경우를 확인해 보겠습니다.
    case1] 선언 후 초기화 하지 않은 경우
    file : HelloArray.cpp
    const int array_size = 3;
    //int i_array[array_size] = {1,2,3};
    int i_array[array_size];
    for(int i=0;i<array_size;i++)
    {
      printf("Array Element[%d]:%d",i,i_array[i]);
    }

    출력 결과:
    Array Element[0]:-858993460
    Array Element[1]:-858993460
    Array Element[2]:-858993460

    현재 배열 값이 초기화 되지 않았으므로 쓰레기 값(Garbage)으로 불리는
    의미없는 값이 출력되고 있습니다.

    case2]선언과 같이 초기화를 한 경우
    const int array_size = 3;
    int i_array[array_size] = {1,2,3};
    //int i_array[array_size];
    for(int i=0;i<array_size;i++)
    {
      printf("Array Element[%d]:%d",i,i_array[i]);
    }

    출력결과:
    Array Element[0]:1
    Array Element[1]:2
    Array Element[2]:3

선언 후 초기화를 하지 않았을 경우,배열의 요소에는 쓰레기 값이 들어가 있습니다.
이 경우 배열 요소들 사이의 데이터 연산이 수행될 경우 원하지 않는 결과를
얻을 수가 있으므로, 반드시 배열은 선언과 함께 초기화가 되어야 합니다.


  1. 배열 초기화 방법

    case 1] 선언과 동시에 초기화 하기(의미있는 데이터)

    const int array_size = 3;
    int i_array[array_size] = {1,2,3};

    case 2] 선언과 동시에 초기화 하기(0으로 초기화 하기)

    case1가 같은 경우는 초기화할 데이터가 3개 밖에 없기 때문에
    직접 값을 지정이 가능합니다.하지만, 데이터가 아래와 같이 100개정도가
    된다고 하면, 직접 값을 지정은 무리가 있고, 초기화를 위해서 아래와 같이
    {0,}같은 방법으로 모든 배열 원소 값을 0으로 초기화 할 수 있습니다.
    const int array_size = 100;
    int i_array[array_size] = {0,};

    case3] 선언과 동시에 초기화 하기(0이 아닌 특정한 값)

    만약 100개의 데이터를 0이 아닌 다른 값, 예를 들어 3으로 초기화 하고
    싶을때 아래와 같이 적으면 어떻게 될까요?
    const int array_size = 100;
    int i_array[array_size] = {3,};

    첫번째 Element값만 3으로 초기화되고, 나머지 값들은 모두 0이 된다.
    Array Element[0]:3
    Array Element[1]:0
    Array Element[2]:0
    즉, 이방법으로는 특정한 값을 초기화 할수가 없습니다.

    { }형태의 초기화는 첫번째 엘리먼트는 주어진값이 되고, 나머지는 모두
    0이 되는 초기화 입니다.

    특정한 값으로 초기화는 다음과 같은 방법들이 있습니다.

Loop를 이용한 초기화
int initial_value = 0;
for(int i=0;i<array_size;i++)
{
i_array[i] = initial_value;
}

Memset을 사용한 초기화
memset(arr,0,sizeof(i_array));
memset(arr,-1,sizeof(i_array));
*memset을 사용한 경우는 양의정수 값을 사용할 수는 없다.

예를 들어 아래와 같이 초기화를 시도하고 값을 출력해보면 아주
엄청난 값으로 초기화가 된것을 확인해 볼수 있을 것입니다.
memset(arr,3,zeof(i_array));

//memset을 사용해서, 3으로 초기화했을때 배열 엘리먼트의 값
Array Element[0]:50529027
Array Element[1]:50529027
Array Element[2]:50529027

profile
Next Level

0개의 댓글