C언어

1. 배열

boseong_Park 2022. 9. 14. 20:27

1. 1차원 배열

 

1-1 배열이란?:

- 변수들을 하나로 묶은 단위로, 다수의 변수를 선언하고 접근하기 위해 사용됨.

- 배열은 단순히 변수들을 묶는 기능을 할 뿐만 아니라 다수의 변수들에 순차적인 선언과 순차적인 접근을 가능하게 해준다.

 

1-2 배열의 선언 및 접근 방법

1-2-1 기본형

int arr[5];  // 자료형 배열 이름[배열 길이];
arr = {1,2,3,4,5}  // 배열 arr을 1,2,3,4,5값으로 초기화

1-2-2 선언과 동시에 초기화 가능

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

1-2-3 배열의 길이 생략 가능

--> 배열의 길이를 생략하면 컴파일러가 배열의 길이를 세서 자동으로 할당함

int arr[] = {1,2,3,4,5}; // 배열의 길이는 5로 할당됨

1-2-4 배열의 값 생략 가능

--> 생략된 배열의 값은 디폴트값인 0으로 초기화됨

int arr[7] = {1,2,3,4,5}; // 6번째, 7번째 요소들은 모두 0으로 초기화됨

 

1-3 문자열

--> 문자열은 char형 배열에 저장한다

 

1-3-1 문자열 선언 방법

--> 선언과 동시에 초기화 가능

char arr[100] = "hi everyone I'm C";

--> 선언 후 초기화 or 다른 값으로의 초기화는 불가능(배열은 상수로서의 성질을 띠고있기 때문-->포인터 파트에서 자세히 설명)

char arr[100];
arr = "Hi everyone I'm c"; //x

 

1-3-2 문자열 vs 문자 배열(feat. 널 문자)

- 널 문자란?:

 문자열의 끝을 선언해주는 문자 --> 문자열은 저장하려는 문자열보다 길이가 1만큼 긴 배열에 저장해야됨(∵널 문자 자리)

char str[14] = "good morning!"; //(o)
char str[13] = "good morning!"; //(x)
char str[] = "good morning!"; //(o) 문자열의 길이가 자동으로 14로 할당됨
char str[100] = "good morning!"; //(o) 배열의 길이가 문자열보다 길기만 하면 됨

- 문자열의 아스키코드 값: 0 / 공백문자의 아스키 코드값: 32 --> 둘 다 %c로 출력하면 공백으로 출력되지만 서로 다른 문자이다

- 문자열과 문자 배열

   --> 둘의 차이는 널 문자의 유무이다

    ● 문자 배열

      int형 배열엔 int형 숫자들이 배열의 한 요소당 하나씩 저장되듯이 char형 배열에 char형 문자들이 배열의 한 요소당 각각 하나씩 저장되는 형식

char arr[2] = {'h','i'};

    ● 문자열

      문자열이, 즉 문장이 하나의 단위로 배열에 저장되는 형식

char arr[3] = {'h','i','\0'}; //원랜 이런 형식으로 초기화시키진 않지만 위의 예시와 비교하기 위해 이렇게 예를 든다

 

 

※ 널 문자 기능 확인 예제

int main(void)
{
	char str[100] = "i like C programing";
	printf("%s\n", str);

	str[8] = '\0';
	printf("%s\n", str);

	str[6] = '\0';
	printf("%s", str);

	return 0;
}

위 예제의 결과창

- 널 문자는 왜 필요할까?

   컴파일러의 입장에서 문자열을 입력받았을 때, 문자열의 시작은 판단할 수 있어도 문자열의 끝은 판단이 불가능하다.

그냥 선언될 때 배열의 길이가 문자열의 끝이 아니냐 라고 할 수 있겠지만, 앞에서도 말했듯이 길이가 100인 char형 배열에 길이가 10짜리 문자열을 넣을 수 도 있다.

이런 경우를 위해 문자열의 끝을 나타내주는 널 문자가 필요하다.

 

1-4 scanf함수를 이용하여 문자열 입력받기

- scanf함수는 %s를 사용하여 문자열을 입력받는다.

- scanf함수는 공백을 기준으로 데이터를 구분짓는다. 별 다른 함수 없이는 한 단어만을 문자열로 입력받을 수 있다.

- 또한 배열은 다른 문자나 정수, 실수들과는 다르게 &연산자를 사용하지 않는다. 이유는 나중에 포인터를 다룰 때 밝히겠다.

int main(void)
{
	char str[100];
	printf("입력: ");
	scanf("%s", str);

	printf("출력: %s", str);

	return 0;
}

위 예시의 결과창

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

4. 포인터 연산  (0) 2022.09.14
3. 포인터와 배열  (0) 2022.09.14
2. 포인터  (0) 2022.09.14
0. C언어란?  (0) 2022.09.14
계기  (0) 2022.09.14