반응형

C언어 8

Kernighan의 C 언어 프로그래밍 THE C PROGRAMING LANGUAGE 를 읽고

오늘은 초심으로 돌아가서 C언어에 관련된 책을 리뷰해보려 한다. KERNIGHAN의 C언어 프로그래밍 이란 책인데 이 책은 C언어를 만든 사람이 쓴 책으로 2016년에 수정판이 발매되었다. 정말 유명한 고전이고 그만큼 꾸준히 읽히는 책이라 생각된다. 이 책은 입문자가 읽기에는 다소 어렵다. 아니 입문자가 읽기에는 적합하지 않다는 표현이 맞을 것 같다. 대부분의 문법을 소개하지만 핵심만 설명하기 때문에 건너뛰거나 배우지 않은 개념들이 군데군데 튀어나온다. 따라서 입문자라면 이 책으로 시작하는 것을 추천하지 않는다. 중급이상의 프로그래머라면 한번 쯤 읽어 보길 권한다. 이 책의 특징은 입문서처럼 기본적인 문법 사항들을 체크해 나가면서 어쩌면 중급 프로그래머가 모르고 있을지도 모르는 사항들을 군데군데 설명한다..

관심사/도서 2017.01.09

이것이 C 언어다 서현우의 C 프로그래밍 정복 서평

오랜만에 C언어 관련 괜찮은 책을 본듯합니다. 기존에 봐왔던 C언어 관련한 서적들은 대부분 너무 기초에 편중되어있기 때문에, 아주 초보자가 아니면 별 도움이 되지 않는다고 생각됩니다. 프로그래밍 언어 관련 서적을 택할 때 가장 중요한 것은 너무 쉽지도 너무 어렵지도 않은 책을 선별하는 것인데, 이 책의 경우는 C언어의 기초를 막 땐 분들이 읽으면 좋을 것이라고 생각이 듭니다. 저 같은 경우는 이 책의 내용이 그렇게 새롭지 않았지만, C언어 중급으로 가기 위한 중요한 내용을 거의 다 수록했다고 보면 되겠습니다. 요즘 C언어보다 자바를 선호하기 때문에, C언어를 공부하지 않고 자바(java)만 하시는 분들도 많습니다. 제 생각은 더 발전된 프로그래머가 되기 위해 C언어는 기본적으로 꼭 알아 두어야하는 언어라..

관심사/도서 2014.08.18

자료구조 스택(stack) C언어

스택(stack)도 연결리스트와 마찬가지로 선형자료구조다. 우리가 알고있는 메모리의 스택도 같은 구조를 가진다. 스택의 특성은 LIFO(Last in First Out)으로 저장되는 구조인데, 스택을 비우는 순서는 가장 마지막으로 넣은 정보부터 빠지게된다. 책을 박스에 차곡차곡 쌓아서 보관해 놓았는데, 다시 책들을 꺼내기 위해서는 맨 위에서부터 빼내야 하는 이치와 같다. 우리가 알고있는 재귀함수를 이용하는 것도 스택의 특성을 사용한다. 좀 더 예를 들어보면 우리가 C프로그래밍을 할 때 가장먼저 호출되는 함수는 main함수다. 하지만 main함수는 가장 마지막에 반환된다. (LIFO == FILO ) 우리가 구현하고자 하는 스택을 간략히 표현해 보겠다. 2014/02/28 - [프로그래밍/C언어] - 동적..

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

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

C언어 좌변값[팁]

컴파일을 하다보면 lvalue require~ 어쩌구 하는 에러를 보게된다. 무심코 넘어갈 수 있는데 lvalue에 대해서 관찰해보자. 어떤 글에서 보니 사람마다 코딩에 흔적을 남긴다고 한다. 구두점의 위치나 공백습관, 주석형태 등등 많을 것이다. 말하고자 하는 바가 프로그래밍 언어와 사람 말하는 언어습관을 비교하는 것인지 모르겠지만, 코딩을 할때 실제 말하는 것처럼, 습관적으로 하는 코딩습관이 있을 지 모른다. 문법이 확실하지 않아도, 그렇게 말해도, 또는 그렇게 코딩해도 별 문제없이 사용했을 지도 모른다. 실제 언어야 어떻게든 의미만 전달하면 되겠지만, 프로그래밍 언어는 작은 실수라도 에러기때문에 문법에 대해서 끝임없이 숙지하고 생각해야 한다 생각한다. lvalue라는 건 좌변값이라고 말한다. 그럼 ..

C언어 포인터에 대한 이해(3)

포인터 연산 c언어 포인터에 대한 이해 3번째 포스팅 이네요. 포인터란 녀석은 참 단순하지만, 완벽히 이해하지 못하면 골머리 썩는 녀석입니다. 그만큼 c언어에 있어서 포인터란 녀석은 자주 쓰이기 때문이죠. 간혹 포인터를 안쓰고 프로그래밍을 한다는 분도 계시지만, 포인터를 안쓰는건 물감없이 수채화를 그리는 것과 다름없다 생각듭니다. '그럼 이렇게 골머리썩는 포인터를 왜 써야하나요?' 이렇게 질문 하시겠죠? 저는 왜 써야하는지 보단, 포인터가 없다면 많을 것들을 할 수 없기 때문이라 생각됩니다. 물론 포인터말고 좀 더 쉬운 개념의 어떤 문법이 생길지도 모르겠지만, 지금으로서는 포인터로 인해 많은 것들을 할 수 있고, 그런 것들을 경험으로써 익혀 나가게 된다면 포인터는 정말 필요하구나 라고 차차 느껴나가실 겁..

C언어 포인터에 대한 이해(1)

C언어를 사용하게되면 포인터에 대한 이해가 필수입니다. 그래서 천천히 정리도 할겸 글을 씁니다. 그전에 포인터를 그냥 공부하기보단 왜 포인터가 필요한가를 느껴야지 더 와닿지 않을까 생각합니다. 저도 한동한 손을 놓고 있던지라 생각나는대로 정리를 하겠습니다. 포인터는 정말 유용한 도구인데요, 우선 포인터의 정의를 알아야 하겠습니다. 포인터는 번지값을 가지는 변수입니다. Type *P; 여기서 *는 포인터 변수를 선언하는 구두점입니다. Type은 포인터 변수가 가리키는 주소에 선언된 변수의 타입을 나타냅니다. 포인터변수는 주소값만을 취하기때문에 포인터변수의 크기는 항상 4byte로 일정합니다.(여기서 4byte는 32비트시스템에 해당함) 번지값을 갖는것은 의미가 참 큽니다. 그림으로 생각해야 이해가 쉬우니 ..

난수생성 C언어

//설명 : rand() 함수는 난수를 발생시킨다. 보통 random() 이나 randomize()로 사용한다. 다른 방법을 소개하겠다. 위 코드는rand 함수로 0~99까지의 난수를 발생시킨다. srand는 난수를 시드를 받아서 그수에 매핑해서 난수를 발생시킨다. 범위가 일정한 난수를 그때 그때 다르게 발생하려면 시드를 계속 바꾸면서 난수를 생성하면 된다. time은 1970년 1월1일 00시00분00초 를 기준으로 주어진 시간값까지 지난 시간을 리턴해준다. NULL인경우 현재를 나타낸다. 기발하다. **참고 random 함수는 기본라이브러리에 포함되지 않은듯 하다. rand 함수 - #define Rand_MAX 0x7fff 단점 : 실행시킬때마다 난수의 발생 순서가 동일하다. (컴퓨터마다 다른지 어..

반응형