반응형

프로그래밍 215

구조체 정리 C언어

배열은 한가지 Type만을 요소로 갖는다. 그래서 좀 더 다양한 자료들을 사용하기 위해서는 구조체를 사용한다. 배열은 각 요소들의 타입이 같기 때문에 일련적인 수로서 각 요소에 점근 할 수 있었다. 예를들면 arr[7] 이런식이었다. 이런 접근은 포인터 연산인데 각 요소들의 타입이 한가지기 때문에 포인터 연산이 가능했었다. 이제 구조체에 대해서 알아봐야하는데, 이런 근본적인 형태의 차이로 인해서 구조체의 각 요소들에 접근하는 방식은 배열과 차이점이 생길 수 밖에 없게 된다. 그리고 배열에서는 요소라고 하지만, 구조체에서는 멤버변수라고 부른다. 아무튼 여러가지 측면에서 다른 양상을 보이는 두 자료구조는 비교대상이지만 따로 때어놓고 이해하는 것이 편리하다. 구조체의 선언 다음은 구조체를 선언한 코드다. 위 ..

배열 포인터 C언어

이 전시간 포인터 배열에 대해서 알아보았다. 이번에는 배열 포인터에 대해서 간단히 알아보고 구조체로 넘어갈까 한다. 문자열도 다뤄야하는데 사실 배열과 문자열에 관한 내용은 천천히 다루는게 좋지않을까 싶다. 문자열을 다루는 것이 그만큼 배열과 밀접하고 중요하기 때문이다. 또한 포인터의 개념도 완벽히 잡히지 않은 상태에서 다루다보면 이도 저도 안되기 때문이다. 그래서 문자열과 배열을 한번에 너무 깊게 다루는 것은 전반적인 C학습에 저해 요소라 생각든다. 이 부분은 어떤 프로젝트를 하면서 그때 그때 필요한 부분을 익히는 것이 더 효율적이라 생각들고, 문법을 공부하는 입장에서는 C의 전반적인 흐름을 익히는 것이 중요하다 생각된다. 이 블로그의 포스팅의 목표는 간단한 주소록을 시작으로 채팅프로그램, 그리고 C++..

gotoxy()함수를 만들어 써보자.

이전 터보C에 있던 함수입니다. 콘솔환경에서 개발하시는분은 거의 안계시지만, C언어를 공부하시고, 콘솔에서 게임을 간단히 만드시려면 필요한데, 쓰는 방법은 워낙 유명합니다. 윈도우 API를 이용하여 쓰는 방법인데, 간단하게 windows.h 을 include 하신후 다음과 같이 함수를 만들어 쓰시면 됩니다. 첫번째 함수는 settextcolor이고 쓰시는 방법은 settextcolor(1,1) 이런식으로 쓰시면됩니다. 인수에따라 색이 바뀝니다. 두번째 함수는 gotoxy이고 쓰시는 방법은 인수가 좌표고 커서를 그곳에 위치시킵니다. 저같은경우는 아래 함수를 모듈로 만들고 헤더파일을 만들어 인클루드해서 씁니다. 2014/01/24 - [프로그래밍/C언어] - 분할컴파일 하는법(gcc) c언어 헤더파일에 있는..

포인터배열(Ragged) c언어

이전에 동적할당의 경우에서도 잠깐 나왔었는데, 포인터 배열에대해서 좀 더 알아보자. 포인터 배열은 말 그대로 배열의 요소들이 포인터인 배열이다. 선언을 하는 방법은 int *arr[5]; // 이런식으로 단순히 *구두점을 배열명에 붙여주면된다. int *arr[5]의 각요소들인 arr[0],arr[1],arr[2],arr[3],arr[4] 은 포인터가 된다. 아래의 예를 보자. 위 코드는 두가지 사실을 말해준다. 첫째로 각 요소들은 포인터로서 같은 크기지만, 각각 크기가 다른 문자열을 가리키고 있다. 두번째는 이런 요소들이 문자열을 가리킨다고해서 배열명은 아니라는 것이다. 마치 2차배열과 동작이 비슷해 보이지만, 이런 포인터 배열의 요소는 어디까지나 포인터라는 것이다. 만약 배열명으로 작동한다면, 배열명..

값에 의한 호출(call by value)과 참조에 의한 호출(call by reference)에 대한 이해 C언어

함수에서 외부의 값(실인수)을 전달받기 위해 사용되는 변수를 형식인수라한다. 이 형식인수에 외부값(실인수)이 전달되는 방식에 따라 값에 의한 호출과 참조에 의한 호출로 나뉘어 지는데, 값호출과 참조호출로 나뉜다. 일반적으로 실인수를 형식인수에 전달시 대입연산을 하는 경우와 마찬가지 동작이 일어나, 실인수의 값을 형식인수에 대입을 한다. 메모리상에선 실인수의 값을 복사한 후 형식인수에게 할당을 한다. 그 결과 같은 값을 지닌 변수가 서로 다른 메모리 공간에 2개 존재하게 된다. 이 경우 형식인수값을 조작하더라도 실인수의 값은 어떤 영향도 받지 않다. 이런 호출방식을 값호출이라고한다. 그럼 참조에 의한 호출은 어떤 것인까? 실인수의 값을 전달하는 것이 아닌 주소를 전달하는 것이다. 사실 내부적으로 보면 값호..

이중포인터에 대한 이해 C언어

이중포인터에 앞서 필요한 개념을 간단히 설명하겠다. 변수는 메모리상에 데이터가 차지하는 공간을 대변한다. 이런 변수는 시작주소값이 존재하고 타입이 존재한다. 주소값과 타입을 알면 메모리 공간에서 변수를 해석할 수 있다. 이렇게 기본적인 지침을 설명하는 곳은 그리 흔치 않다. 포인터 타입의 행동특성 포인터의 개념은 실제로 너무도 단순 명확하다. 변수의 주소를 가리키는 또 다른 변수라 생각하면된다. 그래서 포인터라고도 하지만 포인터 '변수'라고도 불리운다. 주소를 가리킨다는 말은 실제로는 포인터는 대상체의 주소값을 지닌다는 말이다. 포인터의 동작은 이렇게 자신이 지닌 값, 즉 주소값을 '*'연산을 통해서 참조하는 특징을 한다. 즉 포인터 타입의 행동특성이다. 2013/11/28 - [프로그래밍/C언어] - ..

C언어 배열에 대한 이해(1)

C언어의 기본문법을 체계적으로 정리할 생각은 아니었는데, 글도 점점 쌓여가고, 앞으로도 이런식이면 뒤죽박죽이 될듯싶어서 이해의 흐름 순서대로 정리해 나갈까합니다. 우선 그 유명했던 포인터에 대한 정리는 했으니, 이번엔 포인터의 연산이 많이 쓰이는 배열에 대한 정리를 할까합니다. 기존에도 배열에 관한 정리글을 올려놨는데, 중요한 핵심만 적어 놨습니다. 이번 글에선 그 핵심을 설명하고 포인터가 어떤식으로 작용하는지, 구체적인 예를 들어 설명해 볼까합니다. 배열을 단순하게 일반적인 변수에 첨자를 집어넣는 것으로 생각하면 많은 실수를 할 수 있습니다. 단순한 듯 보이는 배열녀석은 생각보다 다양한 속성을 가지고 있습니다. 어짜피 C언어의 전체를 훑으실거라면 적어도 배열과 포인터만은 확실히 하시길 바랍니다 배열과 ..

void형과 malloc함수에 대한 이해

오늘은 한번에 두가지 주제에 대해서 다루겠습니다. void와 malloc에 대해서 글을 써내려 가려하는데 좀 버거울 수도 있겠습니다. 저도 두 가지를 연관 지으려면 어떻게 해야할지 고심되고, 또 제가 포스팅을 하는 방식은 가능하면 다른 측면으로 생각해 보려고 노력하기 때문에 엉뚱해 질 수 도 있겠군요. 좀 길어질지 모르겠지만 우선 void에 대해서 알아보죠. void형(type)은 타입으로 보기엔 부족한 부분이 있습니다. 그 부족한 점 때문에 void라는 타입은 포인터변수에만 사용할 수 있네요. 일반 변수에 사용하면, 컴파일러는 에러를 뿜어낼 겁니다..(variable or field '변수명' declared void) 또, 함수의 반환형으로 선언할 수 있는데, 이경우 주의해야할 점이 있습니다. voi..

32비트 컴퓨터와 64비트 컴퓨터의 차이점

이번엔 32비트 컴퓨터와 64비트 컴퓨터의 내부동작에 대해서 간략하게 포스팅 하려 합니다. 그리고 왜 32bit와 64bit 컴퓨터에서 메모리 인식범위가 차이가 날까 하는 의문에 대한 해답도 찾을 겁니다. 이 문제는 프로그래밍을 공부하는 분들이면 대부분 이해를 하고 시작하는 파트이기도 합니다. 아직 포스팅은 안했지만 C언어에서 메모리구조(세그먼트)에 관한 글을 조만간 정리해서 올리려 하는데, 이 부분에 대해서 아직 공부를 안하신 분이라면 이 글은 어려운 내용이 아니니 메모리구조를 공부하기전에 흥미롭게 읽어 주셨으면 합니다. 32bit 컴퓨터와 64 bit 컴퓨터의 레지스터 32bit 컴퓨터 cpu의 레지스터 처리값 32bit 64bit 컴퓨터 cpu의 레지스터 처리값 64bit 레지스터는 cpu가 사용하..

프로그래밍 2014.02.05

fgets함수 사용할때 주의점

fgets함수는 스트림의 정보를 스트림에 입력해준다.(문자열) 스트림이란 말이 생소한 사람도 있지만, 흔히 말해서 데이터가 존재하고 그 데이터의 입력 또는 출력이 가능한 장치(파일,모니터,키보드)들을 가르켜 스트림이라고 한다. 자세한 사용법은 파일 입출력을 공부해야하므로 넘어가도록한다. fegts은 스트림을 입력 받을때 엔터까지입력 받는 신기한 함수다. 때문에 위 함수로 입력 받은 문자열의 길이는 입력한 문자열+1이 된다. 이 함수를 제대로 쓰려면 문자열을 수동적으로 맞춰줘야한다. 방법은 여러가지가 있겠지만 가장 일반적인 방법을 소개한다. 비교를 위하여 아래는 gets을 먼저 사용한 일반적인 입력이다. 실행후 gets에 답을 문자열은 my home을 입력하였다. 워낙 간단한 코드라 대충 짠 점은 양해 바..

반응형