C언어

[C언어] 1차원 배열

yujin0517 2021. 8. 3. 15:32

배열

배열은 저장 공간들이 나열되어 있는 형태입니다. 

Ex) 값 4개를 저장하기 위해 저장공간을 4개 사용하는 것은 너무 많기에 크기가 4인 배열을 한 번 선언하여 사용

배열 선언 방법 3가지 

int arr[3];              //크기가 3인 배열을 선언만 한 상태
int arr[] = {1, 2, 3};   //값을 3개 넣어 초기화한 상태
int arr[3] = {1, 2, 3};  //크기가 3인 배열을 선언하여 초기화한 상태

 

배열 인덱스

int arr[5] = {1, 2, 3, 4, 5};  //크기가 5인 배열을 초기화

for(int i = 0; i < sizeof(arr)/sizeof(int); i++) {
	printf("arr[%d] : %d\n", i, arr[i]);  //배열의 값을 출력
}

sizeof(arr)를 sizeof(int)로 나누는 이유는?

=> 위의 코드로 보면 4바이트짜리가 5칸 있기 때문에 sizeof(arr)는 20이 됩니다. 그래서 sizeof(int)를 나눠줍니다.

콘솔창

 

 

* 인덱스가 0부터 시작하는 이유는?

-> "*(arr + 1)" 은 arr배열의 시작에서 1칸 뒤의 값을 읽어오라는 의미입니다.

하지만 *,(),+ 등 많은 연산자를 사용하게 됩니다. 

그래서 대괄호만 사용하여 배열의 값을 출력할 수 있는 arr[1]을 사용하게 되었습니다.

Ex) arr[0] = *(arr + 0) 으로 나타낼 수 있으며 배열의 시작 값을 나타냅니다.

 

문자열 배열

문자 배열을 선언할 때는 널문자를 포함해서 크기를 선언해야한다.

char arrData[6] = "korea";
printf("%s\n", arrData);

-널문자 : '\0'으로 표현하며, 배열의 끝을 알려주는 문자 (문자열 중간에 널문자가 오면 그 전 문자까지만 출력됨)

 

<string.h>

char arrData[6] = "korea";

strcpy_s(arrData, sizeof(arrData), "south");

printf("%s\n", arrData);
printf("%d\n", strlen(arrData));

if(strcmp(arrData, "south") == 0) {
	printf("두 문자열은 동일합니다.\n");
}
  • strcpy_s(배열명, sizeod(배열명), 값) : 문자열 배열의 값을 변경
  • strlen(배열명) : 널문자를 제외한 데이터의 길이
  • strcmp(값1, 값2) : 값1과 값2가 같으면 0을 반환

 

배열 예제

① 주소값 출력

int arData[3] = {1, 2, 3};
int length = sizeof(arData) / sizeof(int);

printf("%p\n", arData);
printf("%p\n", arData+1);
printf("%p\n", arData+2);

printf("%p\n", &arData[0]);
printf("%p\n", &arData[1]);
printf("%p\n", &arData[2]);

 

② 1~5까지 출력, 5~1까지 출력

int arrData[5] = {0, };  //모두 0으로 초기화
	for (int i = 0; i < sizeof(arrData)/sizeof(int); i++) {
		arrData[i] = i + 1;
		printf("%d\n", arrData[i]);
	}
	
	for (int j = 0; j < sizeof(arrData)/sizeof(int); j++) {
		arrData[j] = arrDataSIZE - j;
		printf("%d\n", arrData[j]);
	}

 

③ A~E 출력

char arrAlpha[5] = {' ',};
	for (int i = 0; i < sizeof(arrAlpha)/sizeof(char); i++) {
		arrAlpha[i] = (char)(65 + i);
		printf("%c\n", arrAlpha[i]);
	}

 

 

감사합니다!

 

2021.08.03