배열
배열 선언
선언과 동시에 초기화
int arr1[5] = {1, 33 , 47, 102, 155};
초기화 하지 않음
int arr2[5] = {};
0번째 값을 5, 1번째값을 10으로 초기화, 나머지는 0으로 초기화
int arr3[5] = {5, 10};
모두 0 으로 초기화
int arr5[5];
배열의 크기가 4로 정해지면서 자동으로 초기화
int arr6[] = {11, 22 , 33, 44};
배열의 사이즈
int arr[]={1,2,3,4,5,6};
sizeof(arr)=24 // int형이므로 4byte*6=24
sizeof(arr)/sizeof(arr[0])==6 // 배열 길이
문자열
컴퓨터는 숫자에 문자를 대응시키는 방식으로 문자를 표현한다.
아스키 코드

아스키 코드는 8비트의 데이터를 사용하여 문자를 대응시킨다. 하지만 표를 보면 2^7=128개인 7비트만을 사용하고 있는데 마지막 한자리는 패리티 비트 ( parity bit )이기 때문이다.
패리티 비트는 데이터의 에러를 탐지하기 위해 사용한다. 7자리의 이진수에서 1이 홀수개라면 1, 짝수개라면 0을 덧붙인다. 따라서 아스키 코드는 패리티 비트를 제외한 128개의 문자를 나타낼 수 있다.
유니코드
유니코드는 전 세계의 모든 문자, 기호 ,이모지 등을 고유한 코드 포인트로 정의한 문자 집합이다.
코드 포인트는 U+0000 에서 U+10FFFF까지의 범위를 가지며 총 1,114,112개를 표현할 수 있다.
UTF - 16
유니코드의 초창기에는 2byte만으로 문자표현을 시도했다. 이를 BMP( Basic Multilingual plane)이라 한다.
BMP로는 0x0000~0xFFFF의 65,536 문자만 표현 가능하지만 나머지 코드포인트는 서로게이트 페어(Surrogate pair)를 사용하여 확장한다. (2개의 16비트 단위를 조합)
UTF - 8
가변 길이 인코딩으로 문자에 따라 1~4바이트를 사용한다. ASCII문자는 1바이트로 표현, 다른 문자는 2~4바이트를 사용하여 표현. UTF - 8 은 공간 효율적이며 현재 웹과 대부분의 시스템에서 표준으로 사용된다.
UTF - 32
모든 문자를 고정된 4바이트로 표현한다. 코드 포인트를 직접 매핑하므로 처리 속도가 빠르지만 메모리 효율이 낮다.
코드 포인트 구조
- BMP (Basic Multilingual Plane ,0번 평면)
- U+0000 ~ U+FFFF의 코드 포인트 범위로 가장 많이 사용되는 문자 ( 알파벳, 한글 ,한자 등) 를 포함
- 추가 평면 (Supplementary Planes, 16개의 추가 평면)
- U+10000 ~ U+10FFFF의 코드 포인트 범위로 BMP에 포함되지 않은 고대문자, 이모지, 수학 기호 등
이차원 배열
int main()
{
int tarr[2][3]; //2행 3열
}
int tarr[3][3]
{
{1,2,3},
{4,5,6}
}; //이차원 배열 선언 방법
char tarr[3][10];
for(int i=0; i<3; i++)
{
printf("10자 이내의 문자열을 입력해주세요 : ");
scanf("%s", tarr[i]); // 문자는 기본적으로 1차원 배열이기때문
}

