본문 바로가기

Lobo's study room/[혼공단]c언어스터디

[5주차]Chapter8 키워드 정리

#배열

같은 형태의 많은 데이터를 반복문으로 처리하기 위해서 메모리에 연속적으로 저장해놓고 쪼개서 사용하는 방법

요소의 자료형에 이름을 붙이고 필요한 요소의 개수를 표시한다.

 

#변수 vs 배열

변수를 선언하면 각 변수는 독립적인 저장 공간을 갖고 각각의 이름을 사용한다.

반면 배열은 저장 공간이 연속으로 할당되며 배열명이 전체 공간의 이름이 된다.

 

#배열요소

배열의 나누어진 조각.

배열요소는 배열명에 첨자를 붙여 표현하며 첨자는 0부터 시작한다.

 

#배열 선언시 vs 배열 요소 사용시

배열을 선언할 때 []안의 숫자는 배열 요소의 전체 개수를 표시하며,

배열을 사용할 때는 각 요소가 배열에서 몇 번째에 있는지를 의미한다.

 

#첨자

배열에서의 위치.

배열의 첨자는 0부터 시작하므로 최대 '배열 요소 개수 - 1'까지만 사용한다.

 

#배열 초기화

최초 할당된 저장 공간에는 쓰레기 값이 저장되어있어서 원하는 값을 가지기 위해 선언과 동시에 초기화가 필요.

배열의 초기화는 선언시 최초 한 번만 가능하고 그 이후에는 배열요소에 일일이 값을 대입해야 한다.

 

1)초기화1

int arr1[5] = {1,2,3,4,5};

초기값은 첫번째 요소부터 차례로 초기화된다.

 

2)초기화2

초기값이 배열 요소의 개수보다 적은 경우입니다.

int arr2[5] = {1, 2, 3};

왼쪽부터 차례로 초기화하고 남은 배열 요소는 모두 0으로 채운다.

 

3)초기화3

자동 초기화 기능을 사용하면 배열 요소 개수가 아무리 많아도 모든 요소를 쉽게 0으로 초기화할 수 있다.

int arr2[1000] = {0};

 

4)초기화4

배열 요소 개수가 생략된 형태

int arr3[] = {1,2,3};

컴파일러는 초깃값 개수만큼 배열 요소 개수를 정하고 저장 공간을 할당합니다.

 

5)초기화5

double형 배열과 char형 배열을 선언하고 초기화합니다.

각각의 자료형에 맞게 double형 배열은 실수 값으로 초기화하고 char형 배열은 문자로 초기화합니다.

 

#sizeif

배열 요소의 개수를 직접 계산하여 반복문에 사용하는 방법.

sizeof(배열명)/sizeof(배열 요소)

sizeof 연산자를 배열명에 사용하면 배열 전체의 크기를 바이트 단위로 계산하는데, 이 값을 배열 요소 하나의 크기로 나누면 배열 요소의 개수를 구할 수 있다.

이렇게 구한 배열 요소의 개수를 각 반복문의 반복 횟수로 사용하면, 나중에 배열 선언문에서 요소의 개수를 바꾸더라도 나머지 코드를 수정할 필요가 없다.

 

#char형 배열

저장할 문자열의 길이보다 최소한 하나 이상 크게 배열을 선언하는 것이다.

여분의 공간이 필요한 이유는 널 문자(\0)를 저장하기 위함.

1)배열의 크기는 최대한 넉넉하게 선언한다.

2)배열 요소의 개수는 최소한 '문자열 길이+1'이어야 한다.

 

#널 문자

초기화된 문자들은 배열의 처음부터 차례로 저장되어 문자열을 만들고 남는 배열요소에는 자동으로 0이 채워진다.

모든 문자는 아스키 코드 값으로 저장되므로 결국 널 문자는 아스키 코드 값이 0인 문자로 '\0'으로 표현한다.

이러한 널 문자는 문자열의 끝을 표시하는 용도로 쓰인다.

할당된 배열에 널 문자가 없으면 이어지는 메모리 영역까지 쓰레기값을 출력하고 때로는 메모리 접근 에러가 발생한다.

 

#strcpy

새로운 문자열을 저장하는 함수로, 저장할 문자열의 길이를 파악하여 딱 그 길이만큼만 char형 배열에 복사하고 문자열 끝에 널문자도 자동으로 붙여준다.

strcpy(저장될 배열명, 저장할 문자열);

첫번째 인수로는 저장될 곳의 배열명을 주고 두번째 인수로는 저장할 문자열을 사용한다.

첫번째 인수는 문자열을 모두 저장할 수 있도록 충분히 커야 한다.

두번째 인수는 문자열 상수뿐만 아니라 char형 배열의 배열명도 사용할 수 있다.

 

#string.h

문자열을 다루는 함수들의 원형을 모아 놓은 것으로 strcpy 함수에 접근하기 위해 사용.

 

#gets

빈칸을 포함하여 한 줄 전체를 문자열로 입력한다.

get(str);

문자열 입력 중간에 빈칸이나 탭 문자를 사용할 수 있으며, enter를 누르기 전까지 전체를 하나의 문자열로 배열에 저장한다. 물론 마지막에 널 문자를 붙여서 문자열의 끝을 표시한다.

입력한 배열의 크기보다 긴 문자열을 입력하면 배열을 벗어난 메모리 영역을 침범할 가능성이 있기에 항상 배열의 크기를 고려한다.

 

#puts

문자열 상수나 char형 배열의 배열명을 주면 문자열을 화면에 출력하고 자동으로 줄을 바꿔준다.