티스토리

도끼블로그
검색하기

블로그 홈

도끼블로그

dokkiblog.tistory.com/m

프로그래밍 블로그

구독자
0
방명록 방문하기

주요 글 목록

  • [C언어 강좌] #49 구조체 오늘의 강의 내용은 제목에도 쓰여있듯이 구조체입니다. 구조체는 여러가지 변수를 묶어서 하나의 타입을 정의하는 것입니다.int , float , double , char 등등 여러가지 자료형처럼 새로운 자료형을 하나 만드는 것입니다. 다만 형태가 지금까지 배웠던 기본 자료형들과는 다릅니다.배열이 여러개의 변수를 한번에 선언할 수 있듯이 자료형도 여러개의 변수를 한번에 만들 수 있습니다.int형 배열, float형 배열같은것 처럼 배열은 하나의 타입만을 여러개 만들었지만, 구조체는 여러개의 타입을 한번에 만들 수 있습니다.또한 그 타입마다 이름을 붙일 수 있고, 새로운 자료형으로써 사용 가능합니다. 예제를 보면 금방 이해가 될 것입니다. - 구조체 선언 구조체를 선언하는 방법은 다음과 같습니다. 123456.. 공감수 0 댓글수 0 2018. 6. 2.
  • 원더보드 얼마전에 친구가 알려줘서 하게 된 모바일 게임입니다. 전략 + 보드 + RPG요소가 섞인 게임인데 무슨 게임인지 가볍게 보기만 하려다가 빠져서 하고있습니다. 덱을 선택하는 화면입니다. 여기까지만 봤을때는 그냥 클래시로얄을 배낀 게임인줄 알았는데, 실제로 게임을 플레이해보니 클래시로얄과는 많이 달랐습니다. 보드게임과 RPG가 섞인 게임입니다. 서로 턴을 번갈아가면서 캐릭터를 하나씩 움직일 수 있고 상대가 공격 범위에 들어오면 공격됩니다. 게임 플레이도 단순해서 금방 적응하고 플레이하고 있습니다. 생각보다 되게 재밌더라구요. 한번 해보시는걸 추천합니다. 원더보드 링크 주소입니다. https://www.onestore.co.kr/userpoc/game/view?pid=0000718383 공감수 0 댓글수 0 2017. 8. 20.
  • [C언어 강좌] #48 함수 포인터 제목에서도 알 수 있듯이 이번 주제는 함수 포인터입니다.함수 포인터라는 이름만 들어도 딱 감이 오시겠지만, 함수포인터는 함수를 가리키는 포인터입니다. 변수만 메모리 공간에 저장되는 게 아니고 함수도 메모리 공간에 저장돼서 호출 시 실행이 됩니다.그렇다면 함수도 메모리 공간에 있으니 당연히 메모리 주소도 존재한다는 뜻이겠죠? 배열의 이름이 배열의 시작주소 값을 나타내는 것 처럼 함수의 이름도 메모리 공간의 주소를 나타냅니다. 123456789#include int add(int a,int b) { return a+b;}int main (void) { printf("%d",add);}cs 두 변수를 더해서 값을 반환하는 add함수를 만들고 함수명을 적어서 출력해봤습니다.출력결과는 add함수의 주소 값이 출력.. 공감수 0 댓글수 0 2017. 5. 12.
  • [C언어 강좌] #47 배열포인터 배열포인터에 대해 알아봅시다.우선 배열포인터는 포인터배열과는 다른겁니다.이름이 비슷해서 헷갈릴수 있죠. 포인터배열은 저번에도 말했듯이 포인터변수를 담을수 있는 배열입니다.그에비해 이번에 배울 배열포인터는 배열을 가리키는 포인터변수입니다. 사실 근데 배열 이름은 첫번째 원소의 주소를 가리키고있는 상수 포인터라고 배운적이 있잖아요? 그래서arr[i]*(arr+i)이 둘은 같다고 볼수있죠. 배열포인터라는건 결국 그 포인터 상수를 가리키는 포인터라고 볼수 있기때문에 이중포인터라고도 볼수 있습니다.이중포인터에 대해서는 저번 46강에서 설명해드렸었죠. 배열포인터는 보통 다차원배열에 접근할때 쓰입니다. 12345678#include int main(void) { int arr[2][3] = {{0,1,2},{3,4,.. 공감수 0 댓글수 0 2017. 5. 8.
  • [C언어 강좌] #46 다중 포인터 안녕하세요. 오랜만에 C언어강좌를 다시 써보네요.한 3~4달정도 블로그 포스팅을 쉰것같습니다.오랜만에 써서 갑자기 강좌가 좀 다른느낌이 들수도 있습니다. 양해 부탁드려요 ㅋㅋ 예전 강좌까지는 이미지를 통해서 코드를 보여드렸었는데 굳이 그럴 필요 없었더라고요.12345#include int main(void) { printf("HelloWorld");} cs앞으로는 이런 방식으로 예시를 보여드릴수 있겠습니다.그리고 예전에는 1일에 한개씩 글을 썼지만 이제는 그렇게까지는 못쓸것같네요.조금 불규칙적으로 글을 작성하게 될것같습니다. 그래도 시간날때마다 틈틈히 써보도록 할게요. 아무튼 여기까지는 잡소리였고 강좌 시작하겠습니다.이번에 배워볼 내용은 다중 포인터라는 개념인데요. 말만 들어도 감이 오지않나요?다중포인터.. 공감수 0 댓글수 0 2017. 5. 5.
  • [C언어 강좌] #45 포인터 배열 포인터 배열에 대해 설명해보겠습니다.포인터를 선언할때도 다른 변수들과 마찬가지로 배열로 선언이 가능합니다.그것을 포인터 배열이라고 하는데 다른 변수들의 배열을 선언할때와 마찬가지로 포인터 배열은 한번에 여러개의 포인터변수를 선언할수 있습니다. 위 예제처럼 해주시면 포인터 배열 선언이 가능합니다.배열 원소 3개에 각각 포인터변수가 있고 포인터변수는 각자 다른 주소들을 넣을수 있습니다. 그리고 각각 가진 주소값을 참조하려면 *연산자가 두번 필요합니다.포인터배열인 arr도 결국 배열의 시작 주소를 담고있는 상수포인터이기때문에 각각 원소에 접근하려면 *연산자를 사용해야하고그 원소에 있는 주소값으로 한번더 접근하려면 *를 또 사용해줘야합니다. 위 예제처럼 배열방식으로 둘다 접근해도 정상적으로 작동하고 *연산자와 .. 공감수 1 댓글수 0 2017. 1. 21.
  • [C언어 강좌] #44 동적할당 malloc , free 안녕하세요! 저번편까지는 분명 포인터를 설명하고있었는데 갑자기 이상한놈들이 튀어나왔네요.하지만 이녀석들은 메모리와 많이 관련되있는것들이기 때문에 메모리 주소를 담는 포인터와도 연관이 꽤 있습니다.그래서 포인터를 설명하다말고 malloc이라는것을 설명해드리려합니다. 동적할당은 전역변수나 지역변수와 달리 프로그램이 실행되고 있는 도중에 메모리 공간을 할당할수 있는것입니다. 우선 malloc을 사용하기 위해서는 stdlib.h 라는 헤더파일을 포함해주셔야 합니다.standard library ( 표준 라이브러리 ) 의 약자입니다. 위와같이 stdlib.h를 포함하신후 malloc( 크기 ) 를 호출해주시면 그 크기만큼 메모리 공간을 할당해주고 할당된 메모리공간의 주소를 반환합니다. 그래서 int형 포인터를 만.. 공감수 0 댓글수 0 2017. 1. 20.
  • [C언어 강좌] #43 배열과 포인터-2 이번편에서는 배열과 포인터에 대해서 설명하지 못한부분을 마저 설명해드리겠습니다.42편과 이어지는 내용이므로 먼저 봐주세요. 배열은 상수형태의 포인터라고 저번편에서 설명해드렸습니다. 근데 배열을 참조할때는 뒤에 [i] 를 붙여서 참조합니다.그리고 배열은 상수형태의 포인터죠. 포인터에도 똑같이 사용할수 있을겁니다.결국 포인터 뒤에 [i]를 붙이면 해당 주소를 참조할수 있다는 얘기가 됩니다. *연산자를 쓰지 않고 배열처럼 참조해봤습니다.[0]은 해당 주소에서 0만큼 이동한다는 얘기니까 결국 그 주소를 참조하는게 됩니다.그래서 *연산자를 이용했을때와 같은결과가 나왔습니다. 이렇게 배열의 첫번째 주소를 담을경우포인터변수인 p를 배열처럼 사용하는것도 가능합니다. 포인터를 배열처럼 쓸수 있지만 배열을 포인터처럼 사용.. 공감수 0 댓글수 0 2017. 1. 19.
  • [C언어 강좌] #42 배열과 포인터 이번에는 배열과 포인터의 관계에 대해서 설명해드리겠습니다.저번에 배열에 대해 설명해드릴때 주소값과 연관지어서 설명을 많이 드렸었죠. arr[사실 배열은 상수 포인터라고 보시면 됩니다. 위처럼 arr이라는 배열을 선언했을때 arr은 가장 낮은번지의 주소값을 담고있는 상수 형태의 포인터입니다. arr의 출력결과를 보시면 실제로 주소값을 담고있다는걸 알수있죠. arr은 &arr[0]의 주소값과 같습니다. 즉 arr이라는 포인터 상수는 그 배열에서 가장 낮은번지의 주소값을 가리키고있을 뿐입니다. 그리고 arr[i]에서 i * 자료형의 크기 만큼 주소값을 증가시켜서 그곳에 접근하는것입니다. 그리고 위에서 말씀드렸듯이 상수입니다.대입은 불가능합니다. 공감수 0 댓글수 0 2017. 1. 17.
  • [C언어 강좌] #41 void 포인터 이번에는 void형 포인터 시간입니다. 포인터 타입을 정할때 우리는 포인터가 가리킬 대상의 타입에 맞춰서 포인터를 선언해줬었습니다.하지만 void형포인터는 대상체가 정해져있지 않습니다. 대상체가 정해져있지 않다는말은 다른 자료형들처럼 특별히 하나의 자료형만 가리킬수 있는것이 아니라 모든 자료형을 가리킬수 있습니다.특별히 하나의 대상이 정해져있지 않습니다. 그럼 여기까지 봤을때는 "아그렇다면 어떤것이든 가리킬수 있으니 항상 void형 포인터를 쓰면 되겠네요!"라고 생각하실수도 있습니다. 하지만 우리가 포인터를 선언할때 타입을 지정해주는 이유가 무엇이였죠?대상을 참조할때 어느정도의 크기를 어떻게 읽어야하는지 가르쳐주는 역할을 하는것입니다.void포인터처럼 가리키는대상이 무엇인지 알수가 없으면 어떻게 참조해야.. 공감수 0 댓글수 0 2017. 1. 16.
  • [C언어 강좌] #40 NULL 포인터 오늘 강좌는 깜빡하고 조금 늦어버리고 말았네요 ㅋㅋㅋ어차피 시간맞춰서 꼬박꼬박 보는사람도 없을거라 생각하지만요. 아무튼 이번에는 NULL포인터입니다. 포인터를 처음 선언할때는 기본적으로 쓰레기값을 가지고있습니다.그래서 초기값을 넣어줘야하지요. 근데 선언만 해놓고 가리킬 공간이 딱히 없다면? 아니면 가리키던공간이 쓸모없는 메모리공간이 됐다면?포인터가 가리킬곳을 다시 정해줘야하는데 그럴 방법이 없죠.만약 포인터가 쓰레기값을 가지고있을때 그 포인터가 가리키고있는 메모리공간에 무언가를 하면 치명적인 일이 일어날지도 모릅니다.우연히 그 메모리공간이 프로그램에서 매우매우 중요한 메모리공간이였다면 치명적인 버그가 터질수 있습니다. 그럴때 사용되는것이 NULL포인터입니다.NULL은 stdio.h를 보면 이렇게 정의되어.. 공감수 0 댓글수 0 2017. 1. 15.
  • [C언어 강좌] #39 *p++ 포인터변수인 p에 *p++처럼 사용되는경우를 많이 볼수 있습니다.예제와 함께 배워봅시다. 배열 arr을 가리키고있는 포인텨변수 p를 선언하고 *p++를 통해 배열의 요소를 하나씩 출력해봤습니다. *연산자와 ++연산자는 우선순위가 같습니다. 하지만 우측이 우선적으로 계산되기때문에 ++가 먼저 연산됩니다.하지만 ++의경우에는 그 문장이 끝난 후에서야 값이 증가하죠. 그래서 *로 먼저 참조를 하고 출력이 끝난 후에서야 p의 값이 증가합니다. 하지만 (*p)++의 경우에는 전혀 다른식이 되버리죠. 이경우에는 먼저 p에 접근한후 p가 가리키고있는 곳의 값을 증가시킵니다.결국 포인터의 주소가 바뀌는게 아니고 포인터가 가리키고있는 값이 증가하게되버립니다. *p++의 경우에는 10,20,30,40,50이 순서대로 출력.. 공감수 5 댓글수 0 2017. 1. 14.
  • [C언어 강좌] #38 포인터끼리 연산 저번에 포인터연산에 대해 간단하게 알아봤었죠.포인터에 정수를 더하거나 뺄수 있습니다. 단 그것은 포인터의 자료형 크기만큼씩 증가하고 감소하는거였죠.이번엔 포인터끼리의 연산을 알아봅시다. 우선 포인터끼리의 덧셈입니다.결론부터 말하자면 이건 컴파일러에서 허용하지 않고 필요하지도 않습니다. 위처럼 포인터끼리 더하려하면 컴파일에러를 뿜어냅니다.p1과 p2의 합은 사실상 p1,p2와는 전혀 무관한 값이고 아무런 의미도 없는 주소입니다.이런경우 프로그래머의 실수인경우가 대부분이기때문에 컴파일러는 이것을 오류로 처리합니다. 하지만 포인터끼리의 뺄셈은 가능합니다.이것은 실제로 의미있는값이기도 합니다. 그것은 두 주소간의 거리를 의미하기 때문입니다.근데 여기서도 이상한일을 볼수 있습니다. 분명 결과는 4가 나와야할텐데... 공감수 3 댓글수 0 2017. 1. 13.
  • [C언어 강좌] #37 포인터연산 이번에는 포인터 연산을 배워봅시다.메모리접근에 사용되는 *연산 이외에도 포인터에는 덧셈과 뺄셈도 가능합니다.하지만 여기서 중요한건 덧셈과 뺄셈이 가능하다는 사실이 아니라 일반 덧셈뺄셈과는 차이가 있다는것입니다. 포인터가 가리키고있는 주소에 +1을 해봤습니다.근데 출력결과를 보면 이상한일이 일어났네요. 분명 1을 증가시켰는데 출력결과를 보면 4가 증가했습니다. 눈치가 빠르신분들은 알겠지만 위 그림을 보면 +1을 할경우 int형범위를 4칸 뒤에있는 주소로 이동했습니다.int형이 4바이트기때문에 1을 증가시키면 주소값은 4가 증가되는것입니다.즉.여기서 알수있는것은 sizeof(자료형타입)만큼 이동한다는 소리입니다. num을 char형으로 바꾸고 sizeof를 했더니 1이 출력됐습니다. char의 크기는 1바이.. 공감수 1 댓글수 0 2017. 1. 12.
  • [C언어 강좌] #36 포인터 매개변수 하루 한편씩 꾸준하게 c언어 강좌를 올리려니 힘드네요.한달정도 이렇게 유지했더니 이제 분량좀 줄여야겠다는 생각이 들어서 이제부터 한편 분량이 좀 짧아질것같습니다. (사실 이미 짧았..읍읍)전엔 한편에 두세가지 내용을 넣었다면 이제 한편에 한내용정도만..안그래도 전부터 한편에 한가지 내용만 넣은적은 꽤 있었지만말입니다. 아무튼 오늘은 간단하게 포인터 사용의 예제를 보여드리겠습니다.포인터로 변수를 가리킬수 있는데 이걸 어디다쓰나요? 그냥 포인터 쓰지말고 변수를 직접 써도 될텐데말이죠.하지만 포인터가 필요한부분이 있습니다. 그리고 포인터를 배우고나면 컴퓨터 구조에 대해서 어느정도 이해하고 갈수 있을겁니다.사실 포인터가 어렵다는말은 들어보셨을수 있겠지만 개념자체는 그렇게 어려운것이 아닙니다. 기본이 튼튼하게 잡.. 공감수 3 댓글수 0 2017. 1. 11.
  • [C언어 강좌] #35 포인터 *연산자 이번에 배울것은 포인터 *연산자입니다.*연산자는 우리가 곱셈을 하는 연산자로 많이 사용했었죠. 그리고 포인터를 선언할때도 사용했었습니다.하지만 이것도 &와 마찬가지로 포인터에서는 다르게 쓰입니다. 피연산자가 두개가 아닌 오른쪽에 한개만 있을경우 다르게 쓰입니다. 우리는 포인터를 선언하고 포인터가 특정한 메모리영역을 가리키게 할수 있습니다.근데 그래서 어떻게할까요? 아직까지 포인터는 아무데도 쓸수가 없었습니다.하지만 오늘 *연산자를 배우고나면 포인터를 사용할수 있게됩니다. *연산자는 포인터가 가리키고있는 메모리 공간에 접근할수 있습니다.포인터에 저장되있는 주소가 005f123이라고 하면 *연산자를 사용할경우 005f123번째 메모리 영역에 접근하게됩니다. 이런식으로 포인터가 가리키는 메모리영역에 접근해서 .. 공감수 1 댓글수 0 2017. 1. 10.
  • [C언어 강좌] #34 포인터의 타입 저번시간에 포인터의 선언 방법을 배웠습니다.이번에는 포인터를 선언할떄 붙는 타입에 대해서 더 알아봅시다. int형 변수의 주소값을 저장하려면 int형 포인터를 선언하면 되고double형 변수의 주소값을 저장하려면 double형 포인터를 선언하면 됐었습니다.그리고 unsigned가 붙어도 마찬가지로 unsigned int는 unsigned int형 포인터 변수가 필요합니다. 그럼 포인터변수의 크기는 몇바이트일까요?sizeof연산자로 출력해보니 4바이트라고 나왔습니다.포인터변수가 int형의 주소를 담을수 있는것이라서 4바이트일까요? 포인터변수가 가리키고있는 곳을 double형으로 바꾸고 double형 포인터로 바꿔도 4바이트로 출력됩니다.여기서 알수있는것은 포인터변수의 크기는 가리키고 있는 변수의 크기와는 .. 공감수 1 댓글수 0 2017. 1. 9.
  • [C언어 강좌] #33 포인터 드디어 이제 포인터를 배울 시간입니다. 전에 변수에도 주소가 있다고 했었던적이 있었습니다.그리고 배열과 그 주소도 연관되어있다고 했었죠.변수가 어디에 위치하고있는지 나타내기 위해서 메모리상에서 각각 모두 주소를 가지고있습니다.우리가 현실에서 살고있는 집도 모두 어디있는지 나타내기 위해서 주소를 가지고있죠.만약 택배를 보낼때 주소를 알고있어야 그 위치로 가서 택배를 건네줄수 있을것입니다.마찬가지로 변수를 저장할때도 주소를 알고있어야 그 주소로 가서 값을 저장할수 있을겁니다. 포인터 변수는 바로 그 주소를 저장해둘수 있습니다. 이번 편에서는 간단하게 포인터를 소개하는정도만 하겠습니다. 포인터변수는 위와같이 선언할수 있습니다.int형의 변수를 담을수 있는 포인터 변수를 선언한것입니다.물론 int형뿐만 아니라 .. 공감수 1 댓글수 0 2017. 1. 8.
  • [C언어 강좌] #32 자료형의 변환 (형변환) 자료형의 변환은 char형을 int로 바꾸거나 int를 double로 바꾸는식으로 표현방식을 바꾸는것을 말합니다. 형변환에는 두가지 종류가 있는데자동 형 변환과 강제 형 변환이 있습니다.자동 형 변환은 자동으로 발생하는것이고 강제 형 변환은 프로그래머가 직접 형 변환을 해줘서 강제로 변환이 일어나는겁니다. 위 예제는 자동 형변환이 일어나는 상황입니다.실수형인 double형에 int형 정수인 100이 대입되려할때 자동으로 상수 100은 형 변환이 일어납니다.상수가 자동으로 double형으로 변환되어서 100.0으로 변환되서 대입됩니다. 이런식으로 정수형을 실수형으로 바꿀때는 단순히 뒤에 소수점이 붙는것으로 실수형으로 바뀔수 있습니다.하지만 실수형을 정수형에 넣으려할때는 어떻게 변환될까요? 정수형 변수에 실.. 공감수 5 댓글수 0 2017. 1. 7.
  • [게임리뷰]HAWKEN 안녕하세요. 오랜만에 게임리뷰를 하는시간이 왔네요.이번에 플레이한 게임은 HAWKEN이라는 FPS게임입니다. 로봇끼리 치고박고 싸우는 게임입니다만 1인칭으로 직접 로봇에 탑승해서 싸운다는 느낌으로 만들어져있습니다.스팀에서 플레이할수있고 무료게임입니다. 게임 모드도 여러가지가 있는데 사람들과 대전할수있는것과 코옵플레이로 나뉩니다.데스매치는 계속해서 부활하면서 싸우고 최고득점자가 승리하는방식입니다.그리고 팀데스매치는 팀전으로 싸워서 킬수가 더 많은쪽이 이기는것입니다. 그리고 시즈모드와 미사일어썰트도 있는데 시즈모드는 공중전함에 연료를 공급하면 공중전함이 상대 기지에 포격을 퍼붓습니다.미사일 어썰트는 맵들에 있는 터렛들을 점거하여 상대 기지에 미사일을 발사하면 됩니다. 이 두 모드는 자기 기지를 지키고 상대 .. 공감수 1 댓글수 0 2017. 1. 6.
  • [C언어 강좌] #31 상수 , const const 는 constant의 약자입니다.constant는 변함없는 이라는 뜻을 가지고있죠. 변수의 값을 바꾸는것을 방지하기 위해서 존재하는것이죠. const를 붙이면 그 변수는 상수가 되는것입니다. 변수와 달리 상수는 값을 변경할수 없는 읽기만 할수있는것이죠.상수는 이름을 가진 상수와 이름을 가지지 않는 상수 두가지로 나눌수 있습니다. 이름을 가지지 않는 상수를 리터럴 상수라고합니다.우리는 지금까지 리터럴 상수를 많이 봐왔습니다. 이 예제에 있는 10과 20이 리터럴 상수입니다. 여기서 num에 값을 저장하려면 10과 20의 덧셈연산이 먼저 이뤄져야겠죠.하지만 cpu에서 연산을 하려면 10과 20도 메모리상에 존재해야 연산이 가능합니다.그래서 10과 20을 메모리공간에 상수형태로 저장하고 두 상수의 .. 공감수 1 댓글수 0 2017. 1. 6.
  • [C언어 강좌] #30 자료형의 크기 sizeof 안녕하세요. 함수에 대해서 어느정도 설명이 끝났습니다.근데 아직 자료형에서 설명하지 못하고 넘어간부분들이 있어서 마저 설명해보려 합니다. 우선 자료형이란것은 데이터를 어떻게 사용하고 크기를 어느정도로 정해줄지를 표현해주는 용도로 사용되는것입니다.저번에 자료형에 대해서 소개하면서 봤던 int의 경우에는 '크기는 4바이트로 하고 그것을 정수로 사용하겠다' 라고 하는겁니다.그것을 알려주기 위한게 바로 자료형이였죠. 근데 int형이라고 무조건 4바이트일까요? 자료형의 크기는 컴파일러마다 다르게 정해져있습니다.물론 대부분 int형은 4바이트로 사용하긴 합니다만 일부 환경에서는 4바이트가 아닐수도 있다는것이죠. 그래서 만약 int를 4바이트로 생각하고 그것을 기준으로 코드를 작성했다면 int를 2바이트로 생각하는 .. 공감수 1 댓글수 0 2017. 1. 5.
  • [C언어 강좌] #29 재귀함수 예제 오늘은 재귀함수를 예제와 함께 설명해보려합니다.재귀함수로 만들수잇는 대표적인 예제로는 팩토리얼이 있습니다.확률과 통계 과목에서 배우셨을거라 생각합니다. 1부터 n까지 순서대로 곱하는것이 팩토리얼이죠. 3! = 3x2x1이런식으로 말입니다. 근데 팩토리얼에서도 재귀적인 특징을 볼수있죠. 5! = 5x4! 4! = 4x3! 3! = 3x2! 2! = 2x1! 1! = 1x0! 어떤가요? 재귀적인 특징이 보이시나요? 팩토리얼에서 계속 또다른 팩토리얼을 부르고있습니다.참고로 0! 은 1입니다. 팩토리얼을 구하는 함수가 있다고 했을때 5팩토리얼을 구할때는 5와 4팩토리얼 함수의 반환값을 곱해주면 됩니다.그리고 4팩토리얼 함수는 4와 3팩토리얼 함수의 반환값을 곱해주면 됩니다.그리고 재귀함수가 무한루프에 빠지지 않.. 공감수 0 댓글수 0 2017. 1. 4.
  • [C언어 강좌] #28 재귀함수 이번에는 재귀함수를 배워봅시다. 우리가 맨날 쓰는 int main(void)함수가 있습니다. main함수에서 다른 함수를 호출하죠,그렇다는 말은 함수에서 다른 함수를 호출할수 있다는 얘기가되죠.근데 함수가 다른함수가 아닌 자기 자신을 다시 호출하면 어떻게될까요?그게 바로 재귀함수입니다. 오늘은 재귀함수에 대해서 설명해드리겠습니다. 이런식으로 함수속에서 자기 자신을 다시한번 호출하는게 재귀함수입니다.하지만 위와같은 코드는 무한반복을 하게 되버립니다. 그렇기때문에 위 예제처럼 재귀함수가 끝날수 있게 만들어줘야합니다.근데 여기서 헷갈리실수도 있는 부분이 있습니다. 자기 자신을 호출했을때 그냥 처음부터 함수를 다시 실행시키는 형태가 아닙니다!위와같은 그림은 틀렸습니다. 함수를 호출하면 또 하나의 함수가 실행되는.. 공감수 2 댓글수 0 2017. 1. 3.
  • [C언어 강좌] #27 번외편 - 코딩스타일 안녕하세요. 이번에는 쉬어가는 느낌의 번외편으로 코딩스타일에 대해서 설명해드리려합니다.프로그래밍을 하다보면 다른 프로그래머와 일하게되는일이 많이 있을수 있죠.다른 프로그래머와 공동작업을 할때 충돌이 날수 있는 부분이기도 합니다.기계가 이해하는건 모두 똑같겠지만 코드는 사람이 작성하기때문에 차이를 보이게됩니다. 대표적인 코딩스타일으로는 중괄호위치와 변수이름이 있죠. 중괄호에 따른 대표적인 코딩스타일은 다음과 같은게 있다고합니다. 코드 스타일 if(1){printf("Hello, world!");} BSD if(1) {printf("Hello, world!"); } GNU if(1) {printf("Hello, world!");} K&R 이 이외에도 여러가지가 있는거로 알고있지만 대표적으로 사용하는것은 위 .. 공감수 0 댓글수 0 2017. 1. 2.
  • [C언어 강좌] #26 - static 이번에는 static변수에 대해 알아봅시다. 전역변수와 지역변수 모두 static을 쓸수 있습니다. 하지만 일단 지금은 지역변수에 대한 부분만 알아봅시다.전역변수에서의 static은 나중에 설명드리겠습니다. 지역변수에 static은 전역변수의 성질을 갖게됩니다. 하지만 지역변수적인 특성도 가지고있죠.static이 붙게된 지역변수도 선언된 지역변수는 해당 지역에서만 접근이 가능합니다. 이건 지역변수의 특징과 같습니다.하지만 전역변수처럼 프로그램이 종료될때까지 소멸되지 않고 메모리 공간에 존재합니다. 이건 전역변수의 특징과 같지요. 이 예제를 보면 전역변수처럼 변수가 소멸되지 않습니다.static 변수는 한번만 초기화되고 프로그램과 운명을 함께하게됩니다. 하지만 전역변수처럼 모든공간에서 쓸수있는것이 아니라 .. 공감수 2 댓글수 0 2017. 1. 1.
  • [C언어 강좌] #25 - 전역변수 저번편에서는 지역변수에 대해서 알아봤습니다. 이변 편에서는 그것와 비교되는 개념인 전역변수를 알아봅시다.전역변수는 지역변수와는 달리 모든지역에서 사용이 가능한 변수입니다.프로그램이 실행될때 메모리공간에 할당되서 프로그램이 종료될때까지 프로그램과 운명을 함께하는 변수입니다.13편에서도 소개된적이 있는 이 전역변수는 지역변수와는 달리 중괄호 내에서 선언하지 않고 밖에서 선언해주면 됩니다. 위와같이 중괄호 밖에서 선언해서 전역변수 a가 만들어졌습니다.전역변수는 지역변수와는 달리 프로그램이 끝날때까지 소멸하지 않기때문에 hello를 여러번 출력했더니 a값이 증가되서 출력되는걸 볼수 있습니다. 그리고 전역변수는 특이한 성질이 하나 더 있습니다. 위와같이 전역변수에 초기값을 지정해주지 않았더니 0으로 초기화댔습니다.. 공감수 0 댓글수 0 2016. 12. 31.
  • [C언어 강좌] #24 - 지역변수 더 자세히 안녕하세요. 강좌 13편에서 지역변수에 대해 언급하고 지나갔습니다.하지만 아직 설명하지 못한부분이 많기때문에 더 자세하게 설명해드리겠습니다. 저번시간에 지역변수는 중괄호 내에서 선언되면 모두 지역변수라고 했었죠.그리고 지역변수는 메모리에서 존재 기간과 변수에 접근 가능한 범위에서 차이를 보입니다.그리고 중괄호로 둘러쌓인곳을 하나의 지역이라 하고 그 지역에 있는 지역변수들은 해당 지역을 벗어나면 소멸합니다.즉 중괄호가 닫히는 부분부터 사용이 불가능합니다. 그리고 함수도 중괄호로 둘러쌓여있기 때문에 동일하게 적용됩니다. hello함수를 3번 호출하면 변수 a도 3번 선언되고 소멸하고를 반복합니다. 그리고 지역변수는 선언된 지역에서만 존재하기때문에 다른 지역에서 같은 이름의 변수가 선언되도 문제 없습니다.he.. 공감수 2 댓글수 0 2016. 12. 30.
  • [C언어 강좌] #23 - 식 안녕하세요. 이번에는 식에 관련된 내용을 다뤄볼까 합니다. 함수를 소개하다가 뜬금없이 나오긴 했지만예전에 자세하게 설명해드리지 못하고 놓친부분이라 이번에 제대로 설명하고 가려고 합니다. 저번에 배운 연산자와 연결되는 내용이라고 볼수 있기때문에 안보셨다면 먼저 보는걸 추천합니다.6강 연산자 - http://dokkiblog.tistory.com/22 식에는 결과값이 나와야합니다.우리가 아는 대입연산자같은것도 모두 결과가 있습니다. 대입연산자같은 경우에는 우측의 값을 좌측에 저장한 후에 우측의 값이 결과로 남게됩니다. a = b = 50이런 코드같은 경우에도 b = 50이 진행된 후 50이 남게되서b에 50이 저장된 후 a = 50이란 식이 남게되고 a에도 50이 저장됩니다. 결합 순서에 대해서는 저번 6강.. 공감수 1 댓글수 0 2016. 12. 29.
  • [C언어 강좌] #22 - 함수의 인자, 리턴 이번시간에는 함수의 인자와 리턴에 대해서 자세하게 알아봅시다.함수를 소개하는시간에 언급되었던 것들이죠? 그리고 인자는 저번 매개변수 시간에 더 알아봤었습니다. 두 정수의 합을 구하는 함수를 만들어봤습니다.함수를 호출할때 넘겨주는 값이 인자라고 했었죠. 여기서는 10과 30이 인자가 됩니다. 넘겨주는 인자의 개수는 항상 매개변수의 개수와 같아야합니다.그리고 첫번째 인자는 첫번째 매개변수에 대입되고 두번째 인자는 두번째 매개변수에 대입되는식이라고 보시면 됩니다. 그리고 위와같이 변수를 넣을수도 있고 연산을 한것도 인자로 들어갈수 있습니다.식이 있으면 항상 그자리에는 결과가 남게되서 그 결과가 인자로 들어가는것이죠. 물론 함수를 호출해서 반환된 값을 또 인자로 넣어줄수도 있습니다.반환된 값은 함수를 호출한 자.. 공감수 1 댓글수 0 2016. 12. 28.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.