1. 문제 설명
우선 프로그래밍을 할 때 가장 먼저 생각해야 할 것은 자료구조다.
그 다음은 프로그램 코드를 작성하는 부분은 훨씬 자연스럽게 이루어진다.
이 프로그램에서는 “어떤 데이터가 보관되어야 하는가?”를 생각해봐야 한다. 전화번호부 프로그램 -> 사람의 이름과 전화번호들을 저장해야한다.
가장 기본적인 방법 -> 배열 사용. 사람 이름도 여러 개, 전화번호도 여러 개니까. 두 개의 배열 생성 -> names : 사람 이름 순서대로 저장 , numbers : 숫자를 순서대로 저장 배열의 index를 이용해서 이 번호가 누구 번호인지 정보를 유지하겠다.
초기값 설정
names란 이름을 정의한다면 -> 이름, 크기, 타입 numbers - 숫자로 타입을 정의하는게 꼭 좋은건 아님, (-,0로 시작하는 경우 등) 그래서 문자로 다루기로 했다.
두 개의 배열 사용. 각 배열의 타입은 char * 타입 초기값 n 은 0으로 초기화. 그리고 n을 증가시켜서 현재 포함되어 있는 사람 수를 정의하기로 함 또한 기능에 해당하는 add,find,status,remove 함수 정의
main 함수 설정
무한루프를 걸어준 뒤, 사용자로부터 연속적으로 명령어를 받고 사용자가 exit을 입력하면, break로 빠져나가는 구조.
strcmp 함수의 경우
add 함수 설정
이름과, 전화번호를 배열 name[n]과 numbers[n] 즉 n 번째 칸에 저장을 한다. 그리고 n값을 저장시켜준다.
###strdup
strdup는 배열을 만들고 매개변수로 받은 하나의 문자열을 거기에 복사하여 반환한다. strcpy와의 차이는? => buf1과 buf2는 add에 속한 지역변수다. 따라서 strdup을 사용한다.
전역변수
- 프로그램이 시작될 때 메모리가 할당되며 프로그램이 종료될 때 까지 유지된다.
- Data section이라고 부르는 메모리 영역에 위치한다.
지역변수
- 자신이 속한 함수가 호출될 때 메모리가 할당되며 함수가 return될 때 소멸된다.
- 스택(stack)이라고 부르는 영역에 위치한다.
동적 메모리 할당(dynamic memory allocation)
- 아무때나 malloc 등의 함수를 호출하여 필요한 크기의 메모리를 할당할 수 있다. 이것을 동적 메모리 할당이라고 부른다.
- 동적으로 할당된 메모리는 힙(heap)이라고 부르는 영역에 위치한다.
- 동적으로 할당된 메모리는 명시적으로 free()함수를 호출하여 반환하지 않는 한 계속 유지된다.
RAM이라고 생각해보자
- 프로그램 코드가 있고 (코드를 컴파일한 기계어 코드) 그 다음 전역변수 저장되는 data section.
- code 와 data section은 일반적으로 변하지 않는다. 이미 정해져 있기 때문이다.
- 지역변수들은 stack이라는 영역에 저장이 된다. 따라서 크기는 일정하지 않고 영역이 커졌다가 작아졌다 한다.
- heap은 malloc으로 할당되는 동적 메모리 영역이다.
참고자료