C언어(2020년)

14. 배열

리더2333 2020. 11. 2. 19:51
반응형

배열은 변수 이름 뒤에 [ ](대괄호)를 붙인 뒤 크기를 설정한다.

그리고 배열을 선언하면서 값을 초기화할 때는 { } (중괄호)를 사용한다.

 

자료형 배열이름[크기];

자료형 배열이름[크기] = {값,값,값}; // 크기가 3일경우 값이 3개, 크기가 n 일 경우 값도 n 개

#include <stdio.h>

int main()
{
	int numArr[10] = { 0,1,2,3,4,5,6,7,8,9 };
	
	printf("%d\n", numArr[0]);
	printf("%d\n", numArr[5]);
	printf("%d\n", numArr[9]);
	
	return 0;
}

int numArr[10] = { 0,1,2,3,4,5,6,7,8,9 };

    (설명) 인트형 변수 numArr 의 배열 10개를 만들고, 그 내용을 각각 0,1,2,3,4,5,6,7,8,9 로 초기화 한다.

 

printf("%d\n", numArr[0]);

    (설명) numArr 배열변수의 0 번째(첫번째) 값을 출력한다. 첫번째 값을 0 으로 초기화 했으므로, 0 이 출력됨

 

printf("%d\n", numArr[5]);

    (설명) numArr 배열변수의 5 번째(여섯번째) 값을 출력한다. 여섯번째 값을 5 으로 초기화 했으므로, 5 이 출력됨

 

printf("%d\n", numArr[9]);

    (설명) numArr 배열변수의 9 번째(열번째) 값을 출력한다. 열번째 값을 9 으로 초기화 했으므로, 9 이 출력됨

 

약간 혼돈이 있을 수 있다.

우리는 흔히 숫자를 1부터 세는 습관이 있기 때문에

1이 첫번째라고 생각하지만, C언어에서는 0이 첫번째인 것이다.

 

0 을 시작으로 하는 것을 Zero Base Index 라고 하고

1 을 시작으로 하는 것을 One Base Index 라고 한다.

 

C 언어는 Zero Base Index 이다.

 

왜 C언어는 One Base Index 가 아니고 Zero Base Index 를 선택했냐

라고 궁금증을 갖을 수 도 있겠습니다만,

그건 그렇게 정했기 때문입니다.

 

더보기

흠.... 건물을 생각해보자,

위로는 1층 2층 3층 4층 ...

아래로는 지하1층 지하2층 지하3층 ...

그럼 0층은 어디인가???

0층이 없다? 수에서는 -3 -2 -1 0 1 2 3 인데, 0층이 없다?

아님 지하 1층과 지상 1층의 사이인 지표면이 0층인가?

그렇다면 1층과 2층사이는 1M 라면 1층과 0층은사이는 0.5M 인가?

숫자로 층간 거리를 표현한다면 2-1=1 인데 1-0=0.5 ??

여러가지로 논리적으로 맞지 않다고 생각할 수 있겠지만,

그냥 건물에는 0층이 없다. 그냥 그렇게 정했다 라는 것이다.

그리고 영국에는 0층이 있다.

우리가 흔히 말하는 1층을 영국에서는 0층이라고 한다.

영국에 여행가서 2층으로 가세요. 라는 말을 들었다면,

우리는 실제로 3층으로 가야된다.

// 초기화 하지 않고 선언
int numArr[10];

초기화 하지 않고 선언하기도 가능하다. 대신에 변수의 값에 가비지(garbage) 값이 들어간다.

가비지(gabage)란 쓰레기, 폐기물을 의미하는 영어 낱말로서

메모리를 변수에 할당하였으나, 초기화 하지 않았기 때문에

메모리에 남아있는 값이 들어간다는 얘기이다.

실제로 어떠한 값이 들어갈지는 알 수 없다.

이경우 numArr[0] = 0; 이런식으로 일일이 대입해줘야 한다

int numArr[10] = { };

위와 같이 선언하면 모두 0으로 초기화 된다.

int numArr[10] = { 0,1,2, };

위와 같이 선언하면 0,1,2, 그리고 나머지는 모두 0으로 초기화 된다.

int numArr[] = { 0,1,2,3,4,5,6,7,8,9 };

위와 같이 배열의 개수를 생략하면 초기화 한 개수에 맞게 배열의 개수가 할당 된다.

반응형

'C언어(2020년)' 카테고리의 다른 글

16. RAM 에 대한 고찰  (0) 2020.11.03
15. 주석  (0) 2020.11.03
13. for 문  (0) 2020.11.02
12. do while 문  (0) 2020.11.02
11. while 문  (0) 2020.11.02