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;
}
