배열(Array)


 배열은 변수들을 연속으로 선언해서 일괄적으로 사용하는 자료형입니다. 배열은 일차원 배열과 다차원 배열로 나뉘며, 앞에서 공부할 때 몇번 활용한 적이 있습니다. 배열 없이 정수형 변수 5개를 선언할 경우 int a,b,c,d,e; 처럼 일일이 직접 선언해야하는데 배열을 사용하면 int a[5]; 처럼 한번에 선언할 수 있습니다. 배열을 전달할 경우 참조 전달이 되기 때문에 *이나 &를 붙이지 않아도 됩니다. 


- 배열

 배열의 사용은 아래와 같습니다. 인덱스는 0부터 시작하며, 변수도 사용 가능합니다. 한가지 주의할 점은 배열은 한가지 자료형으로만 구성해야하며, 선언된 배열의 길이를 초과하는 인덱스를 사용하면 안됩니다.

----------------------------------------------------------------------------------------

타입 변수명[인덱스]

int a[5]; 

int b[];

int c=5; 

int d[c]; 

------------------------------------------------------------------------------------------

 배열에 값을 넣을 때, 초기화하면서 선언할수는 있지만, 선언한뒤에 값을 한번에 넣지는 못합니다.

------------------------------------------------------------------------------------------

int a[3]={1,2,3};   (가능)

int b[3];

b={1,2,3};          (불가능)

→ b[0]=1; b[1]=2; b[2]=3; (가능) b[3]=4: // 배열의 길이를 초과하므로 불가능

------------------------------------------------------------------------------------------




- 다차원 배열

 다차원 배열은 배열을 원소로 가지는 배열을 뜻합니다. 아래와 같이 사용하며 부분적으로 초기화가 가능합니다.

------------------------------------------------------------------------------------------

 int a[3][3]={1,2,3,4,5,6,7,8,9}; 
위와 같이 초기화 하는 경우 배열에는 아래 표와같이 값이 들어갑니다. 
int a[][3]={1,2,3,4,5,6,7,8,9}로 초기화할 경우, 자동으로 초기화된 값을 보고, int[3][3]과 같은 배열의 길이를 가집니다.

구분 

 첫번째

두번째 

 세번째

 a[1]

 a[2]

4

5

 a[3]

 ------------------------------------------------------------------------------------------

 
아래와 같이 부분적으로 초기화할 경우 값이 순서대로 들어가는 것이 아니라 빈자리에는 0이 채워집니다.

 ------------------------------------------------------------------------------------------

int a[3][3]={{1},{4,5},{7,8,9}};

구분 

1번째

2번째 

 3번째

a[1]

0

a[2]

4

5

a[3]

7

------------------------------------------------------------------------------------------

 
문자열은 정수와 다르게, 문자열의 끝에 \0(널문자)를 넣어줘야 합니다. \0를 넣는 이유는 문자열의 끝을 구분하기 위해서 입니다. 문자열은 부분적으로 초기화 할경우에 0대신 \0가 채워집니다.

------------------------------------------------------------------------------------------

char a[3][8] ={"red","skyblue","mint"}

구분 

1번째 

2번째 

3번째 

4번째 

5번째 

6번째 

7번째 

8번째 

a[1] 

r

\0 

\0 

\0 

\0 

\0 

a[2]

\0 

a[3] 

\0 

\0 

\0 

\0 

------------------------------------------------------------------------------------------


 배열을 이용해 16진수를 입력받아 10진수로 변환해주는 소스코드를 작성해 봤습니다.

------------------------------------------------------------------------------------------

#include <stdio.h>

#pragma warning(disable:4996)


int main()

{

char a[] = { '0','1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E' ,'F'}; //16진수 배열

char input[3]; // 입력을 받는 배열 

int i, j;

int num = 0;

printf("10진수로 변환할 16진수를 입력하세요 : ");

scanf("%s", input);

for (i = 0; input[i] != '\0'; i++) // 입력한 배열의 문자가 널문자가 아닐때까지 반복

for (j = 0; j < 16; j++) // 0~16까지 같은수를 찾을때까지 반복  

if (input[i] == a[j])

num = num * 16 + j;


printf("십진수 : %d \n", num);


return 0;


}

------------------------------------------------------------------------------------------

위의 코드를 실행하면 아래와 같은 결과가 출력됩니다. A1을 입력했을때, 'A'는 배열 a의 10번째 이므로 j가 10이되고 num=0*16+10이되서 10이되고, '1'은 배열a의 1번째이므로 다시 num=10*16+1이되서 161이 출력됩니다.


* 출처 : 한국기술교육대학교 온라인평생교육원 C 프로그래밍_2 

          스타일 C프로그래밍 저.김종훈,김종진 출.WellBook




'언어 > C' 카테고리의 다른 글

[C] 배열과 포인터  (3) 2016.12.25
[C] 포인터  (0) 2016.12.23
[C] 디버깅  (0) 2016.12.21
[C] 매개변수 전달 방식  (0) 2016.12.20
[C] 함수(2)  (0) 2016.12.20

+ Recent posts