반응형

언어 자료구조 알고리즘/디딤돌 C언어 150

[C언어] 90. 동적 배열 소스 작성

90. 동적 배열 소스 작성 먼저 EHArr.c 소스 파일에 EHArray.h 파일과 stdlib.h 파일 포함문을 추가하세요. #include "EHArray.h" #include 동적 배열을 생성하는 NewEHArray 함수를 구현하세요. 동적으로 원하는 형식 개체를 생성할 때는 메모리를 동적으로 할당하는 부분과 초기화 부분이 필요하죠. 동적으로 생성하는 부분은 malloc 함수를 사용하고 초기화 부분은 별도의 함수로 작성하세요. 앞으로 초기화 함수 이름은 형식 이름을 두 번 쓰기로 해요. void EHArrayEHArray(EHArray *arr,int init_capa,Element init_value); EHArray *NewEHArray(int init_capa,Element init_valu..

[C언어] 89. 동적 배열 헤더 작성

89. 동적 배열 헤더 작성 여기에서 만드는 동적 배열은 순차적으로 자료를 보관하게 만들기로 해요. 그리고 자료를 보관하는 저장소가 꽉 차면 알아서 저장소의 크기를 늘려주는 확장 가능한 배열로 만들어요. 이를 위해서는 동적 배열 구조체의 멤버로 동적으로 할당한 저장소의 위치 정보를 기억하고 있어야겠죠. 그리고 현재 저장소의 크기 및 현재 보관 개수를 기억하고 있게 멤버를 정하세요. 여기에서는 동적으로 생성한 자료를 보관할 수 있게 void * 형식을 요소 형식으로 정의하세요. typedef struct _EHArray EHArray; typedef void *Element; struct _EHArray { Element *base; //저장소의 위치 정보 int capacity; //현재 저장소의 크기 ..

[C언어] 88. 사용자 정의 배열 개요

88. 사용자 정의 배열 개요 프로그래밍을 하다 보면 C언어에서 제공하는 형식 배열로 자료를 관리하는 것으로는 한계에 부딪힐 때가 있어요. 예를 들어 회원 관리 프로그램에서 최대 몇 명의 회원을 관리할 것인가를 개발 단계에서 결정할 수 없을 때도 많아요. 프로그램을 사용하는 사용자가 원하는 만큼 관리를 해야 할 때도 있어요. 그리고 프로그램이 알아서 자료를 관리할 공간을 늘려주면 더 좋겠죠. 이 때 동적 메모리 할당을 이용하여 프로그램을 작성하면 가능하겠죠. 이번에는 동적 메모리 할당 함수를 이용하여 확장 가능한 동적 배열 구조체와 관련 함수를 만드는 실습을 할 거예요. C언어에서 제공하는 형식 배열은 컴파일 시점에 원소 개수를 정해서 한계가 있어요. 여기서는 구조체로 동적으로 생성한 개체를 보관할 수 ..

[C언어] 86. 학생 구조체 동적 메모리 할당 실습

86. 학생 구조체 동적 메모리 할당 실습 이번에는 사용자 정의 형식의 데이터를 동적으로 생성하는 기능과 소멸하는 기능을 작성하는 실습이예요. 사용자 정의 형식의 데이터를 동적으로 생성하는 기능은 New_[형식 이름]으로 명명하기로 해요. 소멸하는 기능은 Delete_[형식 이름]으로 정의할게요. 그리고 생성하는 과정에서 초기화하는 기능을 생성자 소멸하는 과정에서 해제화하는 기능을 소멸자라 부를게요. 사용자 정의 형식 실습에 사용한 프로젝트에 필요한 기능을 추가하는 형태로 작성하는 실습이예요. 먼저 Student.h 파일에 필요한 기능을 선언합세요. 여기에서는 동적으로 개체를 생성하는 함수와 소멸하는 함수가 필요하겠죠. Student *New_Student(const char *name);//동적으로 개..

[C언어] 85. realloc 함수

85. realloc 함수 void *realloc(void *base,size_t nsize); C언어에서 동적으로 할당한 메모리는 free 함수를 이용하여 부분적으로 해제할 수 없어요. 대신 realloc 함수를 이용하여 할당한 메모리의 크기를 조절할 수 있어요. 첫 번째 입력 인자에는 이전에 동적으로 할당한 메모리 주소를 전달하세요. 두 번째 입력 인자에는 새로 할당할 메모리 크기를 전달해요. realloc 함수를 이용하면 기존의 메모리의 내용은 유지하면서 메모리 크기를 변경할 수 있어요. 새롭게 늘어난 부분의 값은 쓰레기 값이예요. 그리고 realloc 함수를 호출할 때 첫 번째 입력 인자로 0을 전달해서 동적 메모리를 할당받을 수도 있어요. 대부분 realloc 함수를 사용할 때 동적으로 할당한..

[C언어] 84. calloc 함수

84. calloc 함수 void *calloc(size_t count,size_t size); calloc 함수는 같은 형식 여러 개를 동적으로 할당하기 쉽게 만들어졌어요. 그리고 할당한 메모리는 0으로 설정한 상태로 반환해 줘요. calloc 함수는 메모리를 할당하고 초기화까지 해 주지만 실제 프로그래머들은 malloc을 더 많이 사용해요. ◈ calloc 함수 호출로 동적 메모리 할당 #include #include int main() { int *pi = (int *)calloc(1, sizeof(int)); //원하는 형식 포인터로 형변환 printf("초기: %d \n",*pi); *pi= 20; //간접 연산으로 사용 printf("간접 연산을 수행한 후: %d\n",*pi); free(pi..

[C언어] 83. malloc 함수

83. malloc 함수 void *malloc(size_t size); malloc 함수를 사용할 때는 입력 인자로 필요한 형식의 메모리 크기를 전달하세요. malloc 함수는 요청한 크기의 메모리를 동적으로 할당하여 반환해줘요. 호출한 곳에서는 원하는 형식의 포인터로 형변환하여 할당받은 주소를 기억하세요. 그리고 간접 연산이나 인덱스 연산으로 할당받은 메모리에 원하는 값을 설정하거나 얻어올 수 있어요. 참고로 malloc 함수를 호출하면 메모리만 할당하며 할당한 메모리의 값을 초기화하지 않아요. 따라서 동적으로 할당받은 메모리의 초기값은 쓰레기 값(Garbage Value)이예요. 그리고 동적으로 할당받은 메모리가 더 이상 필요 없으면 free 함수를 호출하여 해제하세요. ◈ malloc 함수 호출로..

[C언어] 82. 동적 메모리 할당 함수

82. 동적 메모리 할당 함수 C언어에서는 데이터를 관리하기 위해 메모리를 할당받는 방법으로 변수 선언을 제공하고 있어요. 그런데 변수 선언으로 메모리를 할당받는 것은 컴파일러 시점에 할당할 메모리 크기를 결정해요. 물론 실제 메모리를 할당하는 시점은 프로그램이 실행 중에 할당하지만 할당할 크기를 결정하는 것은 컴파일 시점이예요. 그런데 프로그래밍하다 보면 할당할 메모리 크기를 컴파일 시점이 아닌 프로그램 실행 중에 결정할 때도 있어요. 학생 관리 프로그램에서 최대 관리할 학생 수를 최종 사용자가 결정할 수 있다면 개발자가 정하는 것보다 훨씬 유연하겠죠. C언어에서는 표준 라이브러리 함수로 동적 메모리 할당 관련 함수를 제공하고 있어요. void *malloc(size_t size); void *call..

[C언어] 81. 사용자 정의 형식 정리하기

81. 정리하기 1. 사용자 정의 형식 실습에서 사용했던 시나리오 규모의 시나리오를 작성하시오. 2. 작성한 시나리오로 형식을 정의하고 기능 구현 및 테스트를 하시오. 74. 구조체75. 공용체76. 열거형77. 사용자 정의 형식 실습 - 시나리오78. 사용자 정의 형식 실습 - 형식 정의79. 사용자 정의 형식 실습 - 기능 구현80. 사용자 정의 형식 실습 - 테스트

반응형