C

c언어- array 배열, string 문자열 사용법

코듀Codyou 2022. 11. 6. 13:36

 

안녕하세요. 코듀Codeyou입니다

오늘은 c언어의 String 문자열과 array배열의 정의, 사용법에 대해 학습해보겠습니다.

이번 주 학습의 목차입니다.

1. 배열 array
1-1. 배열을 사용하는 이유와 기존 변수와의 차이점
1-2. 배열 정의 방법
1-3. 주의할 점
2. 문자열
2-1. 단어, 문장이 저장되는 방법
2-2. NULL, \0이란
2-3. 주의할 점

 

 

문자열을 이해하기 위해서 먼저 array 배열에 대해 학습해 볼 건데요.

1. 배열 array

기존의 변수에는 하나의 정보를 저장할 수 있는 것과 다르게

배열은 기존의 변수를 여러 개를 묶음으로 가지는 변수입니다.

예를 들어 우리가 학습한 기존의 변수는 a=10, b=20으로 저장했다면배열을 사용하면 a[0]=10, a[1]=20....과 같이 쉽게 말해 변수의 이름은 a로 통일하게 사용하고 변수 이름 뒤에 [순번]을 붙여서 여러 변수값을 하나의 이름으로 저장할 수 있습니다.

 

변수가 저장되는 메모리의 측면에서도 차이가 있는데요.기존의 변수의 경우, 연속적으로 정의를 하여도 저장되는 메모리 위치가 랜덤으로 지정된다면,배열은 같은 이름을 가진 변수값들은 메모리가 순차적으로 지정되어 연속적으로 저장되게 됩니다.

 

 

1-1. 배열을 사용하는 이유와 기존 변수와의 차이점

위를 읽으신 분들 중에 굳이 배열을 사용할 필요가 있나?라는 생각을 하신 분들도 있으실 텐데요.직접 변수를 사용한 것보다 배열을 사용했을 때 장점은 다양히 있지만 크게  정의할 때의 편리함과 변수명의 통일 사용, 두 가지로 볼 수 있습니다.

 

먼저 정의할 때의 편리함이란 기존 변수는 int a=10, b=20, c=30.... 이렇게 직접 어떤 변수가 어떤 값을 가지는지 명시해주어야 했다면배열의 경우 int a[3]={10, 20, 30}으로 사용하면 각각의 요소가 어떤 값을 가지는 지 써주지 않아도 된다는 점입니다.지금은 기존의 방식이나 배열의 방식이나 딱히 차이가 없어 보일 수도 있는데요 저장하려는 값이 많을수록 더 효과적으로 사용할 수 있답니다.

 

두 번째로 변수명의 통일 사용이란기존의 변수는 변수명이 모두 달라야 하기 때문에 점수를 저장하는 상황에서 score1, score2, score_3....이렇게 작성해야 한다면배열에서는 score이라는 변수명은 고정하고 순번만 붙이면 되기 때문에 변수명에 대한 고민도 덜뿐만 아니라동일한 속성 값 즉 점수 값인 경우 score라는 배열에 저장하면 어디에 무엇을 저장했는데 헷갈릴 일도 줄 수 있다는 점이 배열 사용의 장점입니다.

 

1-2. 배열 정의 방법

배열의 정의하는 방법은 1-1. 에서도 다루었다시피 자료형 배열명[갯수]={0}or {각 요소의 값} or none위와 같습니다.

 

이때 우변을 {0} 으로 작성하면 해당 배열의 요소들이 갖는 값이 모두 0으로 초기화되고  {각 요소의 값 } 예를 들어 int a[4]= {1, 2, 3, 4}이라면 각 요소의 값이 순번 순대로 a[0]=1, a[1]=2, a[2]=3, a[3]=4로 초기화됩니다.세 번째로 int a[4] 이렇게만 정의할 수도 있는데요 이렇게 작성하게 되면 각 배열의 요소들 안에는 의미가 없는 쓰레기 값이 있게 됩니다. 그리고 추가적으로 int a[]={1, 2, 3, 4} 이렇게만 작성할 수 도 있는데요.이렇게 작성하게 되면 배열의 개수가 정의되지 않아도 우변의 값의 갯수로 배열의 갯수가 설정됩니다.

그렇기 때문에 배열의 개수를 정의하지 않는 방식을 사용하려면

필수적으로 우변에 배열의 값을 명시해주어야 합니다.

 

1-3. 주의할 점

배열을 사용하면서 주의할 점은 

개수가 n개인 배열의 순번은 0부터 시작되어 가장 마지막 요소는 n-1의 순번을 가진다는 점입니다.

 

 

2. 문자열

문자열은 위의 배열의 문자 버전이라고 보면 이해하기 쉽습니다.

문자열은 char형식의 변수들의 배열로 

알파벳 하나가 아니라 단어, 문장을 저장할 때 필수적으로 사용해야 합니다.

 

2-1. 단어, 문장이 저장되는 방법

말로는 단어, 문장이 저장되는 방법이 익숙하지 않을 것 같아 아래의 표를 통해 이해해 보겠습니다. 

 

먼저 char a[6]={"apple"};을 아래의 표로 표현해보겠습니다.

a[0] a[1] a[2] a[3] a[4] a[5]
a p p l e \0

저장되는 방식은 위의 표와 같은데요. 

여기서 주목해야 할 점은 각각 배열의 요소 a[1], a[2]....에 알파벳 하나씩 저장된다는 점과

저장하고자 하는 문자열의 맨뒤에 \0 이라는 NULL값이 필수적으로 저장되어야 한다는 점입니다.

 

2-2. NULL, \0이란

2-1. 의 표에서 저장하고자 하는 문자열 맨 뒤에는 NULL 또는 \0이 들어가야 한다고 하였는데요.

NULL 또는 \0는 '해당 문자열이 끝났다'라는 것을 컴퓨터가 인식할 수 있도록 하는 장치입니다.

그렇기 때문에 저장하고자 하는 문자열 맨뒤의 다음 순번에는 무조건 NULL 또는 \0가 들어가 있습니다.

하지만 우리가 char a[6]={"apple"};이렇게 정의를 할 때는 자동으로 문자열 맨 뒤의 다음 순번에 입력되기 때문에 

사용자인 우리가 직접 NULL 또는 \0을 입력하지 않아도 됩니다. 

 

2-3. 주의할 점

위의 2-2. 의 내용과 연결되는 부분인데요. 

저장하는 문자열의 끝에 NULL 또는 \0을 저장해야 하기 때문에 

문자열의 요소의 개수는 (저장하고자 하는 문자열의 문자 개수+1) 개이어야 한다는 점이 중요합니다. 

 

이상으로 이번 학습을 마치겠습니다.

다음 주에는 Pointer 정의, 사용법에 대해 학습해보도록 하겠습니다.