C언어 코드 환경
- Visual Studio Community을 사용했습니다.
- Visual Studio Community 2019/Visual Studio Community 2022모두 사용 가능
배열은 동일한 자료형을 가지고 있는 데이터의 집합이라고 입니다.
연속적인 메모리블럭을 점유하고 있는 데이터들의 묶음으로 표현할 수도 있습니다.
int student_index[30];
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
선언 후 초기화를 하지 않았을 경우,배열의 요소에는 쓰레기 값이 들어가 있습니다.
이 경우 배열 요소들 사이의 데이터 연산이 수행될 경우 원하지 않는 결과를
얻을 수가 있으므로, 반드시 배열은 선언과 함께 초기화가 되어야 합니다.
배열 초기화 방법
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