본문 바로가기

컴퓨터 이론66

06. 문자열 문자열은 포인터와 동적 메모리 파트에서 몇 번 다루어 봤으니 간단하게 설명하고 넘어가도록 하겠다. 문자열이란? C언어에서 문자열은 문자의 배열로 이루어진 데이터 타입이다. 문자열을 표현할 때에는 큰 따옴표 (" ")를 사용한다. 예를 들어 "Hello!"는 문자열이다. 문자열을 다룰 때에는 문자열의 길이와 내용을 함께 고려해야 한다. 문자열 선언과 초기화 C언어에서 문자열을 선언하고 초기화하는 방법은 아래와 같다. #include int main() { char str1[7] = {'H', 'e', 'l', 'l', 'o', '!', '\0'}; char str2[7] = "Hello!"; char *str3 = "Hello!"; printf("%s \n", str1); printf("%s \n", st.. 2023. 3. 21.
05. 동적 메모리 할당(2) Q. 동적 메모리에 관한 질문 무수히 많은 동적 메모리를 할당하다 보면 어느 순간 메모리가 가득 차게 되는 경우가 발생할 수 있는데 어떻게 해결해야 할까요? malloc() 함수를 이용하여 무수히 많은 동적 메모리를 할당하다 보면 사용하지 않는 메모리들로 인해 어느 순간 할당받을 수 있는 메모리가 없을 수 있다. 이를 해결하기 위해서는 사용하지 않는 메모리는 반드시 해제해야 한다. 메모리를 해제하기 위해서는 헤더파일 내에서 free() 함수를 제공한다. free() 함수 malloc() 함수로 할당한 메모리는 사용하지 않을 때 free()를 이용하여 해제해야 한다. 해제 하는 방법은 아래와 같다. #include #include #include int main() { int size; char *str;.. 2023. 3. 20.
04. 동적 메모리 할당 포인터를 모른다면 이번 글을 이해하는데 어려울 수 있으므로, 이전 글을 먼저 보고 오는 것을 추천합니다. Q. 동적 메모리에 관한 문제 10개의 동일한 데이터 타입을 저장할 수 있는 배열을 선언 할 경우 배열의 크기는 10으로 고정하여 선언하게 된다. 만약, N개의 데이터를 저장할 수 있는 배열을 선언해야 할 경우 어떻게 선언해야 할까? 만약 이번 주제인 동적 메모리에 대한 내용을 모른다면 큰 크기를 저장할 수 있는 배열을 선언하여 사용하게 될 것이다. 그럼 동적 메모리를 이용하여 어떻게 선언할 수 있는지 알아보도록 하자. 동적 메모리 할당이란? 프로그램 실행 중에 필요한 메모리 공간을 할당하고, 더이상 필요하지 않을 때 다시 반환하는 기능을 수행한다. 이를 위해 C언어에서는 헤더파일 내에서 malloc.. 2023. 3. 20.
03. 포인터(2) Q. 포인터 이해를 위한 문제 scanf()를 통한 입력을 받는 경우 저장할 변수의 주소를 이용하여 저장한다고 하였습니다. 예시) scanf("%d", &a); 그런데 문자열을 입력받아 저장하는 경우 & 연산자를 사용하지 않아도 되는데 그 이유는 무엇일까? #include int main(){ char a[30]; scanf("%s", &a); printf("%s\n", a); return 0; } warning : format '%s' expects argument of type 'char *' but argument 2 has type 'char * [30]' 컴파일러에 따라 다르겠지만 위와 같은 주의 메시지가 발생하게 된다. a가 이미 주소를 나타내는 것이라, 굳이 & 연산자를 사용할 필요가 없다는.. 2023. 2. 14.
02. 포인터 Q. 포인터 이해를 위한 문제 여러분은 택배기사입니다. 여러분이 배송해야 할 택배를 받는 사람은 A학생입니다. 여러분은 A학생이 어디있는지 모르는데 A학생에게 택배를 배송하기 위해서는 어떻게 해야 할까요? A학생에게 택배를 배송하기 위해서는 A학생의 집 주소로 택배를 배송하면 된다. 이것을 C언어에 적용하면, A학생은 변수 이름, 택배는 데이터, 그럼 주소는? 주소에 해당하는 것은 메모리 주소이다. 우리는 이 메모리 주소를 저장하기 위해 포인터 변수를 사용한다. 조금 헷갈릴 수 있겠지만, int는 정수형, char는 문자형처럼 포인터를 하나의 타입이라 생각하면 된다. 포인터는 조금 특별하게 전용 연산자가 존재한다. * 연산자와 & 연산자이다. 예제로 알아보자. #include int main() { in.. 2023. 2. 13.
01. 구조체 (struct, typedef) Q. 구조체 이해를 위한 문제 여러분은 A교육기관의 강사입니다. 수강생들의 시험 점수를 관리하기 위한 프로그램을 작성하려고 합니다. 수강생 5명의 수강생번호, 이름, 국어 점수, 영어 점수, 수학 점수 입력받아 저장하고 출력하는 프로그램을 작성하세요. C언어 기초를 배운 학생이 위 문제를 마주한다면 다음과 같이 프로그램을 작성할 것이다. #include void main(){ char student_name[5][10]; int student_num[5], student_kor[5], student_eng[5], student_math[5], i; for(i = 0; i< 5; i++) scanf("%d %s %d %d %d", &student_num[i], student_name[i], &student.. 2023. 2. 10.