본문 바로가기

컴퓨터

[C언어] 포인터 - void *와 함수 포인터 (기본) 1.1 void 포인터 포인터 타입은 원소 타입이 무엇이든 상관없이 프로그램의 메모리 주소를 갖고 있다는 공통점을 갖고 있습니다. 그리고, 프로그램의 메모리 주소가 특정 타입은 어떠한 메모리 주소를 갖어야 한다는 규제는 없습니다. 결국, 포인터 타입의 원소 타입이 있는 것은 개발자가 사용하기 용이하게 하기 위해서 있는 것이지 그 이상의 의미는 없습니다. 이번에 배울 void 포인터의 경우는 원소 타입을 명시하지 않고 선언하고 사용할 때 어떠한 포인터 타입도 받아서 사용할 수 있게 해 주는 포인터로 일반화 과정과 직접적으로 관련이 있습니다. 일반화에 대한 자세한 내용은 프로그래밍 과정에서 상세히 다루도록 하고 여기서는 기본적인 것에 대한 언급만 하도록 하겠습니다. void foo() { int a = 2;.. 더보기
[C언어] 함수 - 함수 만들기 1 함수 만들기 이제 프로그래밍을 하기 위한 기본적인 단계로 간단한 함수를 만드는 작업에 대해서 익히도록 합시다. 프로그래밍을 할 때에는 크게 구도를 잡고 이를 쪼개고 다시 쪼개는 방법에 의한 top-down방식과 작은 부분에 대한 구현을 한 뒤에 이들을 조합을 해 나가는 방법에 의해 bottom – up 방식이 있습니다. 일반적으로 프로그램의 코드를 라이브러리를 사용하는 코드와 개발자 정의 코드로 구분을 한다면 개발자가 정의하는 코드에 대한 구현을 함에 있어서는 top-down방식을 사용을 하는 것이 추세이며 라이브러리를 사용하는 코드에 한해 부분적인 bottom-up방식을 사용하고 있습니다. 즉, 우리가 만드는 부분은 top-down방식이라고 생각을 하더라도 큰 무리는 없습니다.(물론, 프로그램을 설.. 더보기
[C언어] 함수 - 매개변수 전달하기 1.2 함수의 매개변수 함수의 정의를 특정한 기능을 하는 일련의 로직이라 할 수 있는데 해당 기능을 수행하는데 필요한 인수가 필요할 것입니다. 이러한 인수 중에 호출하는 함수에서 초기 값을 전달하는 것을 입력매개변수로 내부에서 임시적으로 사용할 것은 지역변수를 통해 처리를 합니다. 또한, 해당 함수가 수행하고 난 후에 호출한 함수로 전달할 결과값을 리턴을 통해 전달해 줍니다. int fnAdd(int first, int second) { int result =0; result = first + second; return result; } 예를 들어 위와 같이 두개의 수를 더하는 함수가 있다고 한다면 기능을 수행하기 위해 두개의 수를 입력받아야 하고 두 수를 더한 결과값을 되돌려 주어야 할 것입니다. in.. 더보기
[C언어] 함수의 흐름 1.1 함수의 흐름 C로 작성된 프로그램의 흐름은 어떠한 원리로 이루어지는지 흐름을 살펴보기로 합시다. C언어로 작성한 프로그램은 프로세서 초기화 작업이 진행된 후에 main함수에서부터 시작하게 됩니다. 그리고, 기본적으로 순차적으로 진행이 되는데 함수 호출 구문을 만났을 경우에는 호출된 함수를 수행하고 호출된 함수가 종료되면 호출한 함수의 호출구문 다음 구문부터 순차적으로 진행하게 됩니다. 다음의 예제와 그림을 통해 간략하게 프로그램의 흐름을 파악해 봅시다. /* 함수의 포맷을 정의하는 선언부 */ void fnA(); void fnB(); void fnC(); void fnD(); void fnE(); void fnF(); /* 프로그램 함수부 */ int main() { fnA(); /* 함수의 호.. 더보기
[C언어] 함수 - 정의 0 함수 프로그래밍이라는 것은 컴퓨터로 하여금 특정 기능들을 수행하도록 하는 일련의 과정을 말합니다. 여기에서 각각의 기능들이 실제 소스에서 함수로 구현하게 되는데 C언어로 작성된 프로그램에서 실제 컴퓨터가 수행하는 구문은 모두 함수내에 정의하게 됩니다. 이번 장에서는 먼저 함수에 대한 기본 문법사항과 함수를 만드는 과정, 그리고 해당 함수를 사용하는 방법에 대해 학습을 하기로 합시다. 1 함수의 정의 우리는 이미 많은 형태의 함수에 대해 알고 있습니다. 산수에서 블랙박스라든지 중고등학교의 수학에서 y = x+2, 혹은 f(x)= x+2 등 뿐만이 아니라 특정 재료를 넣고 어떤 상품을 만들기 위한 기계 등 많은 곳에서 함수의 모습을 찾아 볼 수가 있습니다. C언어에서는 다음과 같은 포맷으로 함수를 정의를.. 더보기
프로그래밍 단계 1. 프로그래밍 과정 여기서는 프로그래밍 과정을 기초 설계(요구 분석 및 job분배, 스케쥴), 상세 설계 및 구현, 종료 보고 과정을 통해 하나의 프로그래밍을 완성시켜 나가는 과정에 대해 소개하도록 하겠습니다. 이와 같은 개발 공정은 절차식 프로그래밍에서는 적합할 수 있으나 OOP개발 방법과는 다릅니다. 하지만, 이번 장을 통해 여러분들이 설계의 중요성을 깨달을 수 있다면 이후 OOP설계 방법을 익히는 데에도 도움이 될 것이라 확신합니다. 이번 장에서는 이제까지 설명된 기본적인 내용을 토대로 회원 관리 프로그램을 동적 인덱스 배열로 작성할 것이며 다음 장 프로젝트에서는 다양한 형태의 프로그래밍을 예를 소개할 것입니다. 이번 장에서는 전체적인 공정과 각 단계에서 하는 롤에 대한 이해를 해 나가시기 바랍니.. 더보기
C언어 :: 파일 입출력 - 사용 1.2 프로그램밍에서의 파일 입출력 프로그래밍 언어를 배우는 이들은 파일 입출력 함수에 대한 많은 두려움을 갖고 있는 것 같습니다. 실제로 프로그래밍에서 파일을 통해 자료를 관리하는 것은 쉬운 일은 아니지만 이는 파일 입출력 함수가 어려운 것이 아니라 프로그래밍을 하면서 무엇을 저장하고 어떻게 읽어올 것인지에 대한 규칙을 정하는 것이 어려운 것이라 생각이 듭니다. 이 또한 많은 경험을 통해 극복할 수 있고 극복해야 하는 것이기 때문에 두려워 피하지 마시기 바랍니다. 여기서는 8장에서 얘기했던 회원 관리 프로그램을 예로 들어 정적 인덱스 배열, 동적 순수 배열, 동적 인덱스 배열에서 파일 입출력에서 각 주의할 사항에 대해서 파악해 보기로 합시다.(fread, fwrite함수를 소개하면서 보여준 예제가 정적.. 더보기
C언어 :: 파일 입출력 1 파일 입출력 함수의 사용 프로그래밍에 있어 파일 입출력은 매우 중요한 요소라는 것은 틀림이 없습니다. 다만, 우리가 C언어에서 익혀야 할 파일 입출력은 관련 라이브러리를 효율적으로 사용하는 것이지 전체 파일 시스템을 정확히 이해하는 것은 아닙니다. 파일은 파일 시스템에서 관리하는 부분과 O/S에서 관리하는 부분, 응용 프로세서에서 관리하는 부분이 서로 긴밀한 관계속에 진행이 됩니다. 파일 시스템에서는 사용자가 생각하는 논리적인 파일을 실제 물리적인 H/W공간에 저장하여 관리를 하는 것을 얘기합니다. 여기서는 하나의 파일 시스템을 관리하는 슈퍼 블럭이나 부팅이미지를 관리하는 부트 블럭, 논리적 파일과 저장된 물리적 파일 매체간의 1:1 매핑을 하는 inode 블럭, 파일들이 저장되는 프리블럭으로 나누어.. 더보기