C & C++

[C언어] 배열

우준세 2021. 5. 7. 01:21
728x90
반응형

 

 

C언어 포스팅은 '혼자 공부하는 C언어' 책을 보고 공부하고 정리한 것입니다.

내용의 잘못된 부분이나 질문이 있으면 댓글로 남겨주세요! 


1. 배열의 선언과 사용

동일한 자료형을 사용할 때 하나씩 변수를 선언하는 일이 쉽지 않습니다.

배열을 사용하면 많은 변수를 하나로 사용할 수 있습니다.

 

배열(array)는 for문으로 처리하기 위해 메모리에 연속적으로 저장하여 사용합니다.

 

배열의 선언 : 

자료형 배열명[요소 개수]; 

 

// ex)
int ary[3] = { 1, 2, 3 }

 

배열의 초기화 : 

배열도 변수와 같이 최초 저장 공간에는 쓰레기 값이 있습니다.

그렇기 때문에 선언과 동시에 초기화를 해야 합니다.

 

// 1) 기본적인 초기화 방법
int ary[5] = { 1, 2, 3, 4, 5 };

// 2) 초기값이 배열 요소 개수보다 적은 경우
int ary[5] = { 1, 2, 3 };

// 3) 모든 요소에 0을 넣는 경우
int ary[1000] = { 0 };

// 4) 배열 요소 개수가 생략 되도 
//    자동으로 저장 공간이 할당
int ary[] = { 1, 2, 3 };

 

배열의 초기화는 선언 시 최초 한 번만 가능합니다. 

그 이후에는 변수 선언과 같이 일일이 값을 대입해야 합니다.

그렇지만 for문을 활용하여 쉽게 만들 수 있습니다. 

 

int ary[5];

for (int i = 0; i < 5; i++)
{
    scanf("%d", &ary[i]);
}

 

for문을 사용하여 쉽게 배열에 값을 대입할 수 있습니다.

여기서 ary[i]를 이용해 배열의 인덱스의 주소로 접근하여 값을 입력하는 형식입니다.

변수를 사용하는 것과 다른 점은

배열을 사용했을 때는 20바이트의 주소 공간을 연속적으로 할당받지만,

int a,b,c,d,e 와 같이 변수를 쓴다면 4바이트씩 각각의 공간에 할당받습니다.

 

ary[0], ary[1]과 같이 나누어진 조각을 배열 요소(element) 라고 하며

0, 1과 같은 순번을 index 라고 합니다.


sizeof 연산자를 사용한 배열 처리 

앞에 정리했던 배열의 주소 공간을 활용하여 배열 요소의 개수를 파악할 수 있습니다.

 

int ary[5];

cnt = sizeof(ary)/sizeof(ary[0]);

 

sizeof(ary) = 20 / sizeof(ary[0]) = 4 이기 때문에 cnt = 5를 얻게 되어

배열 요소의 개수인 5를 얻을 수 있습니다. 

 


char형 배열 

char형 배열은 문자열을 저장하는 용도로 쓰입니다. 

char형 배열에서 중요한 점은 문자열보다 꼭 공간이 하나 이상 있어야 합니다.

그 이유는 문자열 마지막에 있는 널 값 때문입니다.

 

char형 배열의 선언과 초기화 

 

// 1)
char str[80] = "junse";

// 2)
char str[80] = { "j", "u", "n", "s", "e" };

 

char형 배열의 초기화는 문자 상수로 하나씩 초기화하거나 

문자열 상수로 한 번에 선언과 초기화를 할 수 있습니다.

 

 

strcpy 함수

char형 배열은 문자열을 저장하는 변수 역할이므로 초기화 이후에 새로운 문자열을 저장할 수 있지만! 

문자열의 길이가 다를 수 있어 일반적인 대입 연산자를 사용하는 것은 불가능합니다.

이때 사용하는 것이 strcpy 함수입니다.

 

기본 구조는 

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

 

char str1[80] = "dog";\
char str2[80];

strcpy(str1, "good");

 

만약 위처럼 코드를 작성하여 str1을 출력한다면 

str1는 good을 출력합니다. 

 

첫 번째 인수는 문자열을 모두 저장할 수 있도록 커야 하며

첫 번째 인수는 문자열 상수를 쓸 수 없으며, char형 배열이 와야 합니다. 

 

strcpy로 첫 번째와 두 번째 인수에 char형 배열을 넣을 수 있습니다. 

 

strcpy(str1, str2)

문자열 전용 입출력 함수 : gets, puts 

scanf 함수는 char형 배열에 문자열을 입력할 수 있으나 널 값 전까지만 입력을 받습니다.

이것을 해결하기 위해 gets 함수를 사용합니다.

 

gets()

gets 함수는 빈칸을 포함하여 문자열을 입력합니다. 

 

gets(char형 배열명); 이 기본형입니다. 

 

gets 함수는 입력 중간 빈칸과 탭 문자를 사용할 수 있으며, 엔터키를 누르기 전까지를 하나의 문자열로 봅니다.

 

puts()

puts 함수는 문자열 상수나 char형 배열을 주면 화면에 출력하는 함수입니다.

그렇지만 사용했을 때 자동으로 줄 바꿈이 됩니다.

 

 

c언어를 공부하고 있고 앞부분은 이해하기 쉬웠지만

배열부터는 어려워 블로그에 정리하려고 합니다.

 

질문이나 틀린 부분이 있으면 댓글로 남겨주세요! 

728x90
반응형