안녕하세요 ! 초보개발자 입니다.
이 블로그는 개인 공부 정리용 블로그 입니다.
혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.
그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.
그럼 시작하도록 하겠습니다.
배열(Array)
1) 배열
배열이란 같은 타입의 여러개의 변수를 하나의 묶음으로 표현 하는 것을 배열 이라고 합니다. 중요한점은 배열은 같은타입 이어야 한다는 것이며 다른타입의 변수들로 구성된 배열은 만들 수 없습니다.
배열을 선언 하는 방법은 다음과 같습니다. --> 타입 배열이름[배열길이]
int num[10]; --> int 형 타입의 값을 10개 저장할 수 있는 배열을 선언한다는 뜻 입니다.
배열에 저장된 공간을 접근하기 위해서 인덱스를 이용해야 합니다. 10개의 공간이 생성 되었지만(num[0] ~ num[9]) 인덱스의 범위는 0~9까지 입니다.
예제를 통해서 알아 보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include<stdio.h> int main(void) { int num[10]; num[3] = 10; num[4] = 20; for(int i=0;i<10;i++){ printf("num[%d]의 값은 -> %d\n", i,num[i]); } return 0; } | cs |
위와 같이 int 형 공간을 10개 만들었습니다. num[3]의 공간에는 10, num[4] 공간에는 20이라는 상수를 저장하였습니다.
그리고 실행결과를 보겠습니다.
num[3]의 공간과 num[4]의 공간에는 우리가 저장한 값이 출력 되는 것을 볼 수 있고 나머지 공간은 값을 저장 하지 않았기에 알 수 없는 값이 저장 되어 있습니다.
그리고 또 주의해야할 점은 index의 값을 벗어난 값을 index로 사용하지 않아야 합니다. 예를 들면 int num[10] 를 선언하였을 경우 index의 범위는 0~9인데 num[10] =30; 이런식으로 할 수는 없습니다.
2) 배열의 길이와 크기
배열을 선언 할 때 [] 괄호안에 배열의 길이를 적어 주어야 합니다. 배열의 길이는 변수를 사용할 수 없고 항상 상수만 가능 합니다.
예를 들어
int arrayLength =10;
int array[arrayLength];
이런식으로 변수를 배열의 길이로 사용할 수 없고 int array[10] 처럼 괄호 안에는 상수만 들어 갈 수 있습니다.
배열이 차지하고 있는 메모리의 크기를 배열의 크기라고 합니다. 배열의 크기는 sizeof 연산자를 이용하여 구할 수 있습니다.
예를들면 int num[10];
sizeof(num);
-> 40
num배열의 길이가 10이면 int 형 타입이 4byte 이므로 4*10=40 이 출력 될 것 입니다. 위의 식에서 배열 요소의 크기인 sizeof(int)로 나누게 되면 배열의 길이가 나오게 됩니다.
배열의 크기 = 배열 요소의 크기 * 배열의 길이
배열의 길이 = 배열의 크기 / 배열요소의 크기
이해가 가시죠 ?
3) 배열의 초기화
변수와 마찬가지로 배열도 선언된 후에 알수 없는 값이 저장되어 있습니다. 그렇기 때문에 적절한 값으로 초기화하는 것이 필요 합니다.
int num[5];
num[0]=1;
num[1]=2;
num[2]=3;
num[3]=4;
num[4]=5;
위와 같이 초기화하는 방법은 번거롭고 귀찮기도 합니다. 그렇기 때문에 다음과 같이 간단하게 초기화 할 수 있는 방법도 있습니다.
int num[5]={1,2,3,4,5};
배열에 저장할 값들을 쉼표를 이용하여 나열 하면 됩니다. 괄호안에 있는 값의 개수는 배열의 길이보다 많아서는 안되며 배열의 길이보다 적을 경우는 0으로 초기화 됩니다.
예제를 통해서 알아 보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include<stdio.h> int main(void) { int num[5] = { 1,2,3,4,5 }; int num1[5] = { 0 }; for (int i = 0; i < 5; i++) { printf("num[%d]의 값 : %d\n", i, num[i]); } printf("\n"); for (int i = 0; i < 5; i++) { printf("num1[%d]의 값: %d\n", i, num1[i]); } printf("\n"); return 0; } | cs |
위의 예제의 실행결과는 다음과 같습니다.
앞에서 설명한 것과 같이 결과를 예측하실 수 있을 것입니다.
3) 배열의 복사
다음은 배열을 복사하는 법에 대해서 알아 보겠습니다.
배열을 복사하는 방법은 1. for문을 이용하여 복사하는 방법과 2.memcpy()를 이용하는 방법이 있습니다.
예제를 통해서 알아 보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include<stdio.h> int main(void) { int num[5] = { 1,2,3,4,5 }; int num1[5]; for (int i = 0; i < 5; i++) { num1[i] = num[i]; } for (int i = 0; i < 5; i++) { printf("num1[%d]의 값: %d\n", i, num1[i]); } return 0; } | cs |
위의 방법은 첫번째 방법을 이용 하였습니다. 실행결과를 보면 배열 num 에 저장되어있는 값이 num1 배열에 저장 되었습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include<stdio.h> int main(void) { int num[5] = { 1,2,3,4,5 }; int num1[5]; memcpy(num1, num, sizeof(num1)); for (int i = 0; i < 5; i++) { printf("num1[%d]의 값: %d\n", i, num1[i]); } return 0; } | cs |
두번째 방법을 이용 하였습니다. memcpy() 를 보시면 두번째 인자값에서 첫번째 인자 값으로 num1의 크기만큼 메모리를 복사한다는 뜻입니다.
나중에 memcpy() 에 대해서 자세하게 알아 볼 수 있을 것입니다.
오늘은 여기서 마치겠습니다.
다음시간에는 문자배열에 대해서 알아 보겠습니다.
'프로그래밍 > C언어' 카테고리의 다른 글
[C언어] 배열(3)에 대해 알아보자. (1) | 2017.04.12 |
---|---|
[C언어] 배열(2)에 대해 알아보자. (1) | 2017.04.12 |
[C언어] 반복문에 대해 알아보자. (2) | 2017.04.10 |
[C언어] 조건문(if,switch)에 대해 알아보자. (3) | 2017.04.06 |
[C언어] 연산자 (2) | 2017.04.05 |