문자열과 배열 복습
문자열과 배열 복습
문자와 문자열에는 중요한 차이가 많다. 문자는 %c, %d로 1개로 간단하지만, 문자열은 n개로 %s라는 특징이다. 여기서 배열과 주소, 문자열하면 빠질 수 없는 이야기다. 여기서 이 배열의 그릇을 가리키는 것이 포인터(Pointer)다. 포인터는 주소를 가리키는 것이 매우 중요하다.
우선은 포인터와 빠질 수 없는 배열에 대해 복습한다. 32bits에서는 2^32로 4GB를 가지고 있고, 이 메모리하나하나에 각각의 주소를 가지고 있다고 들어가는 강의 때 배웠다. char에서 문자열 6개를 선언한다면, 여기서 맨 왼쪽(가장 빠른 고유주소)이 기준이 되는 것이 중요하다. 그래서 110, 111, 112라는 세 주소가 있으면, 112는 110의 오른쪽으로 2칸이라고 해서 110+2라고 할 수 있다. 이게 바로 110[2]다. 그러면 char에서 6개가 있으면 맨 왼쪽을 기준으로 오른쪽으로 1,2,3,4,5까지 번호가 있게 된다.(이것을 인덱스 Index라고 한다) 그러므로 char의 구성하는 모든 것이 요소라면 ‘인덱스 = 요소 -1‘이다.
다시 사물함과 그것을 알려주는 주소, 위치 값이 있다면, 사물함에서 주소나 위치 값은 &(주소연산자), 그 반대방향으로 주소나 위치 값으로 사물함을 아는 것은 *(간접지정연산자)가 된다.
메모리 복습
CPU와 RAM, HDD 3가지가 컴퓨터에 들어있으며, CPU, RAM은 연산 장치, RAM, HDD은 기억장치다. 여기서 2기억장치의 차이는 HDD는 장기기억, RAM은 단기기억이다. 여기서 HDD의 메모리를 다루는 것은 파일로, 이설명은 다음시간에 자세히 설명되고, 이번에 배울 RAM의 메모리를 다루는 2가지가, 변수와 동적 할당이다. 여기서 동적(Dynamic)은 런타임(Runtime)이란 비슷한 말로 바꿀 수 있다. 동적할당은 mallo(c)로 하는데, 자세한 것은 다음 강의에 다룬다.
우선 알아둬야 할 것은 영상에서 설명해준다. 많은 메모리가 필요 한다고 하면, 변수선언은 관리가 필요 없다. 그러나 동적할당은 이 메모리의 관리를 직접 해야 된다. 그래서 메모리를 확보하는 과정에서 변수는 자동관리고, 동적할당은 수동관리라고 한다. 그런 이유에서 변수는 배열 말고는 범위가 좁지만, 동정할당은 많은 메모리를 다룰 수 있다.
이들을 알아두어야 다음 포인터 설명이 매끄럽게 흘러갈 수 있다. 이런 기본원리가 다음 강의, c언어의 어려운 부분을 배우는데 크게 도움이 되므로, 꼭 어려우면 반복해서 복습하도록 하자.