반응형

분류 전체보기 209

C언어 18. 파일 입출력-1

이번 글에선 C언어의 파일 입출력에 대해서 알아보도록 하겠습니다. 먼저 파일 입출력이란 무엇인가에 대해서 한번 생각해봅시다. 직관적으로 생각하면 데이터를 파일로 출력하거나, 파일로부터 읽는 것이라 할 수 있습니다. 그런데, 이것은 사람의 관점에서 바라볼 때의 이야기입니다. 실제 프로그램 입장에서 파일 입출력은 더 포괄적인 의미를 가지고있습니다. 프로그램 입장에서 파일은 데이터를 입출력하는 모든 대상이란 의미를 가지고 있습니다. 예를 들어 키보드, 마우스, 모니터 등도 프로그램에겐 모두 파일이 되는 것입니다. 어떻게 이 모든 것을 파일이라는 하나의 단어로 말할 수 있는 것일까요? 스트림 파일 사실 프로그램이 입출력을 실행하는 대상은 모두 동일한 대상입니다. 이 대상을 스트림 파일이라고 말하는데, 프로그램은..

C언어 17. 응용자료형

이번 글에선 응용 자료형에 대해서 알아보도록 하겠습니다. 응용 자료형엔 여러 가지 종류가 있는데, 이번 글에선 구조체, 공용체, 열거형에 대해 알아보겠습니다. 여러 자료형을 포함하는 자료형? 먼저 구조체란 여러개의 변수를 묶어서 저장, 처리할 수 있도록 해주는 것을 이야기합니다. 기본적으로 배열과 흡사한데, 서로 어떻게 다른지 알아보도록 하겠습니다. 배열의 경우에는 배열의 타입에 맞는 데이터들을 저장할 때 사용합니다. 반면 구조체의 경우에는 저장할 데이터들의 타입들이 서로 달라도 사용 가능합니다. 예를 들어 배열과 구조체를 각각 컨테이너 박스라고 하고, 변수를 상자라고 생각해봅시다. 배열의 경우에는 과일상자만 담을 수 있는 컨테이너 박스이고, 구조체는 과일, 생선, 야채 등등을 여러가지 종류를 담을 수 ..

C언어 16. 변수의 영역

이번 글에선 변수의 영역에 대해서 알아보도록 하겠습니다. 사실 이와 관련된 이야기는 지금까지도 몇 번씩 이야기했었는데,이번 기회에 더 자세히 알아봅시다. 변수에는 자신의 영역이 존재한다. 우리가 사용하는 변수에는 각각 자신들이 속한 영역이 존재합니다. 변수들은 이 영역 안에 존재하며, 자신의 삶을 이 영역과 함께합니다. 이러한 변수들이 속한 영역의 범위에 따라서 그 변수를 부르는 호칭이 따로 존재합니다. 먼저 이전에도 한번 이야기했던 자동변수라는것이 있습니다. 이는 지역변수라고도 이야기하는데, 보통 하나의 함수에 종속되어 사용되는 변수입니다. 이 자동변수들은 함수 내에서 변수를 선언하면 메모리 공간을 할당받으며, 오직 그 함수 내에서만 해당 변수를 사용할 수 있습니다. 그리고 그 함수가 종료함과 동시에 ..

C언어 15. 메모리 동적 할당

이번 글에선 C언어에서의 메모리 동적 할당에 대해서 알아보도록 하겠습니다. 지금까지 우리는 메모리 공간을 확보할 때 변수나 배열을 선언하는 방법을 사용했습니다. 이러한 방법의 특징은 코드를 작성하는 단계에서 프로그래머가 확보할 메모리 공간의 크기를 미리 예상하고 작성해야 한다는 점입니다. 이를 메모리 정적 할당이라고 합니다. 메모리의 낭비 하지만 다음과 같은 경우가 있다면 어떻게 될까요? 만약 5개의 속담을 사용자로부터 입력받아 배열에 저장하는 프로그램이 있다고 생각해봅시다. 이를 위해선 배열을 다음과 같이 선언할 수 있을 것입니다. char pro[5][80]; 속담의 정확한 길이를 모르기 때문에 이를 저장할 배열의 길이는 충분히 길게 선언해야 합니다. 하지만 이러한 방식은 필연적으로 메모리 공간의 낭..

C언어 14. 포인터 배열, 다중 포인터

우리는 최근 글에서 포인터란 무엇인지, 포인터의 기본적인 사용법에 대해 알아보았습니다. 이번엔 그 포인터를 사용하는 방법을 좀 더 폭넓게 알아보도록 하겠습니다. 포인터 배열 먼저 포인터 배열이란 것에 대해서 알아봅시다. 배열이란 특정한 자료형을 연속된 기억공간에 저장하는 것이라고 이미 알고 계실 겁니다. 그렇다면 물론 포인터도 배열에 저장할 수 있을 것입니다. 이렇게 배열의 요소가 포인터인 것을 포인터 배열이라고 말합니다. char* ch_P[5]; 포인터 배열의 선언방법은 위와같으며, 배열의 요소가 포인터인것을 알려주기위해 *를 사용합니다. 포인터배열의 각 요소는 포인터이기 때문에 ch_P배열에 다음과 같이 값을 입력할 수 있을 것입니다. char* ch_P[5] = { "apple", "banana"..

C언어 13. 문자열

이번 글에선 문자열에 대해서 알아보겠습니다. 지금까지 저희는 printf를 사용해 문자열을 많이 출력해보았습니다. 하지만 반대로 문자열을 입력받고 저장한 적은 없습니다. 그렇다면 이 작업을 어떻게 해야 할까요? 문자열은 어떻게 저장하지? 그러려면 먼저 문자열에 대해 정확히 알고 넘어가야 할 것이 있습니다. 자료형에 대해 설명했을 때도 보셨겠지만, C언어에는 하나의 문자를 저장하는 char형은 있지만 문자열을 저장하는 자료형은 따로 존재하지 않습니다. 눈치채신 분들도 있을지 모르겠는데, 문자열은 char형의 배열에 저장하면 됩니다. 예를 들어 "seoul"이란 문자열은 크기가 6인 char형의 배열의 각 요소에 seoul을 넣은 것입니다. 그런데 왜 5글자인데 배열의 크기가 6이어야 하는 걸까요? 그건 바..

C언어 12. 배열과 포인터

저번 글에서 C언어의 가장 중요한 특징이라고 할 수 있는 포인터에 대해서 알아보았습니다. 이번엔 포인터와 이전에 알아보았던 배열의 관계에 대해서 알아보도록 하겠습니다. 먼저 기억을 한번 더듬어봅시다. 프로그램에서 배열의 모든 요소를 출력해야 한다면 어떻게 해야 할까요? 맞습니다. 반복문을 사용해서 모든 요소를 출력할 수 있죠. 하지만 이 작업을 한 번만 하는 것이 아닌 프로그램 전체에서 여러번 빈번하게 출력한다면 어떨까요? 이에 대한 함수를 새로 정의해서 사용하면 매우 간단하게 사용할 수 있겠죠. 배열을 함수의 인자로 그런데 한번 생각해봅시다. 이 배열을 어떻게 함수에게 인자로 넘겨줘야 할까요? 배열의 모든 요소를 각각 인자로 넘겨주면 이 문제를 해결할 수 있겠죠. #include void printAr..

C언어 11. 포인터

이번 글에서는 포인터에 대해서 알아보도록 하겠습니다. 포인터는 C언어의 가장 특징적인 부분이자 C언어가 지금까지 이토록 사랑받는 이유 중 하나입니다. 그만큼 C언어 내에서 포인터가 가지는 비중은 매우 큽니다. 이러한 강력한 무기인만큼 포인터를 제대로 이해하고 사용하기란 그리 쉽지 않습니다. 제가 C언어를 처음 배울 때에도 주위의 많은 사람들이 어려움을 호소했고, 저 또한 마찬가지였습니다. 하지만 그만큼 이를 제대로 익혔을 때의 활용도와 성취감은 이루 말할 수 없습니다. 그럼 이제 포인터에 대해서 설명해보도록 할 텐데, 아주 적절한 예가 있어서 인용해보겠습니다. 데이터의 실제주소는 어디일까? 서울아파트 103호에 길동이가 산다고 가정해보도록 합시다. (서울 아파트에는 길동이라는 사람은 단 한 명입니다.) ..

C언어 10. 배열

이번 글에선 C언어에서 사용하는 배열에 대해서 알아보도록 하겠습니다. 배열이란 무엇일까? 먼저 배열이란 특정한 자료형을 연속적으로 나열하는것을 이야기합니다. 여러분이 만약 숫자 5개를 저장하기위한 int형 변수를 선언하려면 어떻게 해야 할까요? #include int main() { int num1, num2, num3, num4, num5; return 0; } 겨우 변수 5개 이기 때문에 별로 어렵지는 않습니다. 하지만 이것이 숫자 500개라면 어떻게 할까요? 그런 때조차 이렇게 코드를 작성해야 한다면 굉장히 불편하고 귀찮을 것입니다. 이런 코드를 배열을 사용해 코딩하면 매우 쉽게 할 수 있습니다. 먼저 배열의 기본적인 선언 방법부터 알아보도록 하겠습니다. 자료형 배열명[배열크기]; 위와 같이 사용하..

C언어 9. 사용자 정의 함수

저번 글에서 보여드린 계산기 프로그램은 다들 만들어보셨나요? 아마 별 어려움 없이 만드실 수 있었을 거라고 생각됩니다. 이번 글에서는 사용자 정의 함수에 대해서 알아보도록 하겠습니다. 함수란 무엇일까? 그러기에 앞서서 먼저 함수라는 건 무엇일까요? 함수는 영어로 function이라고 하며 특정한 작업을 수행하기 위해 만들어진 코드들의 집합,즉 작은 프로그램이라고도 볼 수 있습니다. 사실 지금까지도 우리는 많은 함수를 사용해왔는데요, printf, scanf, for, if등등이 모두 C언어에서 미리 만들어놓은 함수입니다. 이들을 라이브러리 함수라고 부르며, 우리는 지금까지 그것을 가져와 사용한 것입니다. C언어에서 사용되는 표준 라이브러리 함수는 아래의 링크에서 확인하실 수 있습니다. https://ww..

반응형