티스토리 뷰

C언어

C언어 배열

블로그 강승 2021. 3. 12. 14:07

C언어 배열

C언어 배열에 대한 요약이다. Do it! C언어 입문(저자:김성엽) 이란 책을 통해 공부했으며, 책의 카테고리를 바탕으로 필자가 이해한 내용을 요약한 글이다. 내용이 궁금하거나 찾아야 할 내용이 있으면, 필자가 정리한 글을 다시 보면서 복습하기위해 작성했다.

변수 개수가 20개가 필요할 때, 변수로 20개를 지정하고 초기화를 해야 한다면 20개에 일일이 0을 대입해줘야 하는...
그런 작업 너무 끔찍한데, 배열(Array)을 이용하면 아주 쉽게 이용 할 수 있음.

C언어 배열 구성 이미지

short student[0], short student[1], .... , short student[20] 이런 식으로 short 형 변수 20개가 선언된 거랑 같음.
따라서 총 40바이트의 메모리를 차지함.

※주의할점

변수를 선언할 때 요소 개수는 숫자 상수를 적어줘야 함. 왜냐하면 컴파일을 할 시점에는 배열의 크기를 자료형의 크기*요소 개수로 크기를 알기  때문에 숫자 상수를 안 적어주면 컴파일 과정에서 오류가 뜸.(컴파일은 문법적인 관계만 따지기 때문에 요소 개수에 변수를 적으면 그 변수가 무슨 숫자를 의미하는지 번역이 안됨)

 

배열 초기화하기

short student[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

short sutdent[20]={0,}; /* 둘이 같은 방법임, '3'으로 모두 초기화 하려면 반복문 써야함.
                         {3,};으로 넣으면 3,0,0,0.....,0 이렇게 들어감. */

 

배열 크기 생략하기

short data[]={1,2,1,2,1}; /*배열의 크기를 생략할 수 있음 */

※주의할 점
student[1]={5}; 이건 오류임. 선언할 때만 {} 사용할 수 있음.

 

배열은 사용자 정의 자료형이다

char three[3];
/* 3바이트를 내가 마음대로 만들었음. 1바이트 자료형을 3개 만들었으니 3바이트나 다름없음 */

 

문자열의 길이 정보 표시하기

배열을 이용해서 문자열을 저장하려면 문자열의 길이에 대한 정보도 넣어야 함. 따라서 문자의 끝에 NULL(널) 문자 0을 추가로 입력해서 컴파일러에 문자열이란 정보를 알려줌.

char data[6] = {'h','a','p','p','y',0};
char data[6] = "happy"; /* 둘다 같은 표현임 */

char ment[] = "C programming~";
char ment[15]= {'C','','p','r','o','g','r','a','m','m','i','n','g','~',0};
/*둘다 같은 표현임 */

 

문자열의 처리 속도를 높일 수 있음

char data[5] = {'h','a','p','p','y'};
char data_length = 5;
/*이런 표현은 데이터 처리 속도를 높임. */

 

아스키코드 넣는 방법

char beepsound[6] = "abc\7d"; /*abc 사이에 비프음을 나타내는 아스키코드 7번을 넣을때 
                               abc7d 라고 넣으면 7이 아스키코드인지 숫자상수인지
                               구분이 잘 안가니 \7 이라고 표현 */

char beepsound[6] = {'a','b','c','\7','d','\0'};
char beepsound[6] = {'a','b','c',7,'d',0}; /* 같은 표현임 */

 

매개변수에 배열이 있는 경우

int GetStringLength(char data[]) /*[]안에 숫자 안적어도 됨*/
{
int count =0;
while(data[count]) count++;
return count;
}

void main()
{
int data_length;
char data[10] = {'h','a','p','p','y',0,};
data_length = GetStringLength(data); /*변수 이름만 써도됨*/
}

 

문자열을 다루는 C 내장 함수

문자열 관련 함수는 문자열 표준 함수를 이용하면 아주 편함. string.h에 함수 원형이 선언돼 있음.

strlen(문자열이 저장된 변수 이름)
strcpy(복사해서 저장할 변수 이름, 복사할 기존 변수 이름)
strcat(기존 문자열이 저장된 변수 이름, 새로 덧붙일 문자열)

더 많은 함수들이 있는데 이걸 다 외울 순 없고, C 언어 개발 도구에서 해당 함수에 대한 설명을 볼 수 있음.

 

2차원 배열

C언어 2차원 배열 구성 이미지

2차원 배열이 실제 메모리에 저장될 때는 내부적으로 수학 공식을 사용해서 1차원 형태로 메모리에 저장됨.

 

2차원 배열에서 행과 열중 어떤 것을 먼저 처리하는 것이 효율적?

행을 그룹 개수로 넣는 게 효율적임. 같은 행일 때 0,1,2... 열들을 바로 옆 메모리에 저장할 수 있음.

 

2차원 배열 초기화

char temp[2][3]={{1,2,3,},{4,5,6,}};

 

2차원 데이터를 1차원 데이터로 변환

1차원 색인번호 = {(행번호-1)*열개수}+열 번호-1

 

1차원 데이터를 2차원 데이터로 변환하기

행번호 = (색인 번호/열개수)+1
열번호 = (색인 번호%열개수)+1

 

글을 마음대로 배포하셔도 되지만, 출처(링크)는 반드시 남겨주시기 바랍니다.

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

C언어 표준 입력 함수  (0) 2021.03.15
C언어 포인터  (0) 2021.03.14
C언어 지역 변수/전역 변수  (0) 2021.03.12
C언어 반복문/시프트 연산자/비트 연산자  (0) 2021.03.11
C언어 연산자/조건문  (0) 2021.03.11
댓글