줘이리의 인생적기

C - 배열 본문

공부/C

C - 배열

줘이리 2020. 5. 14. 19:25
728x90

 

Index

  • 배열 선언
  • 배열 초기화
  • sizeof를 활용한 배열처리
  • char형 배열 선언, 초기화
  • 문자열 대입
  • gets, puts

 

1. 배열 선언

동일한 자료형을 저장할 저장 공간이 많이 필요한 경우 '배열' 사용.

(주의사항 : 요소의 개수가 5개면 첨자는 0부터 4까지 사용)

배열 기본 구조

 

2. 배열 초기화

최초 할당된 저장 공간에는 쓰레기값이 저장되어 있어서 선언과 동시에 초기화를 해야 한다.

//첫 번째 초기화 방법 : 모든 요소 값 설정
int arr[5] = {1,2,3,4,5};

//두 번째 초기화 방법 : 0부터 차례대로 초기화하고 남은 요소는 0으로 채워짐
int arr[5] = {1,2,3};

//세 번째 초기화 방법 : 모든 요소를 0으로 초기화
int arr[1000] = {0};

//네 번째 초기화 방법 : 초기값 개수만큼 요소 개수가 정해지고 저장 공간 할당
int arr[] = {1,2,3};

//char형 배열 저장 방법
int arr[5] ={'a', 'p', 'l', 'e', 'f'};

 

3. sizeof를 활용한 배열처리

잠깐 문제!

int score[5];

num = sizeof(score) / sizeof(score[0]);

여기서 num은 어떤 값이 나올까요? 또, 그 값은 어떤걸 의미할까요?

더보기

정답 : 5 (배열 요소의 개수)

num = 배열 전체 크기 (20바이트) / 배열 요소 하나의 크기 (4바이트)

 

4. char형 배열 선언, 초기화

배열 선언할 때 중요한 것은 문자열의 길이보다 최소한 하나 이상 크게 배열 선언해야 한다.

그 이유는 널 문자(\0)를 마지막에 저장하기 위해서이다.

//char형 문자열 배열 선언과 초기화
char str[50] = "banana";

 

※널 문자의 용도

초기화한 문자들은 처음부터 차례로 저장되어 문자열을 이룬다.

이때 남는 배열 요소에는 자동으로 0이 채워진다.

char형 배열에 저장된 0을 특별히 널 문자라고 부른다.

아스키 코드 값이 0인 문자를 말하며 문자 상수로는 \0으로 표현한다.

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

 

char형 배열 선언 시 주의할 점

  1. 배열 크기는 최대한 넉넉하게 선언
  2.  배열 요소의 개수는 최소한 문자열 길이 +1 이어야 한다.

 

5. 문자열 대입

초기화된 이후에 새로운 문자열을 저장할 때는 길이가 다를 수 있으므로 일반 변수처럼 대입 연산자를 사용하는 것은 불가능하다.

strcpy 함수를 이용하여 새로운 문자열을 저장하면 된다.

 

strcpy 사용방법

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

 

strcpy 예제

#include <stdio.h>
#include <string.h>     //문자열 관련 헤더 파일

int main(void)
{
	char str1[80] = "cat";  //초기화
	char str2[80];
	
	strcpy(str1, "tiger");  //새로운 문자열 대입   
	strcpy(str2, str1);     //문자열 복사   
	printf("%s, %s\n", str1, str2);

	return 0;
}

실행결과

 

 

6. puts, gets

scanf는 문자열의 빈칸 전까지만 입력한다.

빈칸을 포함한 문자열을 입력하려면 gets를 사용하면 된다.

(주의할 점 : 배열의 크기보다 긴 문자열을 입력하면 메모리 영역을 침범할 가능성이 있음)

 

사용방법

gets(저장할 char형 배열명)

 

puts는 gets와 짝을 이루어 문자열을 출력하는 함수이다.

printf와 출력 기능은 같지만 출력한 후에 자동으로 줄을 바꾼다.

그래서 바로 이어서 입력하는 것은 불가능하다.

 

 

'공부 > C' 카테고리의 다른 글

C - 문자  (0) 2020.05.18
C - 포인터  (0) 2020.05.14
C - 함수  (0) 2020.05.12
C - 반복문(while, for, do ~ while)  (0) 2020.05.12
C - 조건문(if, switch ~ case)  (0) 2020.05.12