c언어를 공부하시다 보면, 한 번 쯤 막히는 부분이 있습니다. 배열 포인터. 쉽게 말해서 배열을 가리키는 무언가입니다. 나중에 행 우선 열 우선 방식을 할 때 다시 언급을 하고, 여기에서는 간단하게 언급을 하겠습니다. 이 글을 읽기 위해서 중요한 것은 배열은 배열 그 자체로 다루어야 한다는 점입니다. 4번째 줄을 보시면, 4 by 4짜리 배열이 선언되어 있습니다. 그리고 5번째 줄에, int (*p)[4] = &(a[0])이라 되어 있는데요. 좌항부터 해석해 보겠습니다. 시계 방향 rule에 따라서 보도록 하겠습니다. 먼저, 4번째 줄부터 해석되는데요. (*p)는 p가 포인터이다. 라는 의미입니다. 그런데, 어떤 포인터일까요? 돌려 보니까 [4]라고 되어 있습니다. 이것은 [4]개짜리의 원소를 가진다는 ..
코딩/C 검색 결과
약 5개월 전에, define 전처리문에 대해서 썼습니다. 이번 시간에는 조건부 컴파일을 할 때 많이 써먹는, #if와 #ifdef에 대한 글을 써보도록 하겠습니다. 당연하게도, 백준 사이트에서도 많이 볼 수 있는 코드이기도 합니다. 먼저 위 코드를 보겠습니다. 이상한 va_list라던지 va_start, vprintf, va_end가 나오지만, 여기에서는 중요하지 않습니다. 단지, 가변 인자를 처리하기 위해서 저런 것들을 썼다 정도만 보시면 되고요. 여기서 중요한 것은 13번째 줄의 #ifdef입니다. 이것은 무엇을 하는 것일까요? 위에 보니까 DEBUG라는 것이 정의가 되어 있지 않아요. 아무 결과도 나타나지 않았습니다. 반면에, 이 코드는 위에서 DEBUG라는 필드가 정의되어 있었습니다. 이 경우에..
제목. 왜 10시간동안 아래 코드가 잘못된 동작을 하는 원인을 찾았는가? 제목이 꽤나 성가실 지도 모르겠습니다만, 오늘 몇 시간동안 삽질한 주제였습니다. 자신의 코드는 잘 안 보인다고 하는데, 그 말이 딱 맞았습니다. 심지어 고인물들이 모여 계시는 알고 싯포 톡방에서, const char * 문제인가? 를 가지고도 간접적으로 질문을 했는데, 실험도 해 보고, 이것 저것 팁들을 들어보니, 이것도 답이 아니였습니다. 당연하게도, 제가 완전히 잘못 파악한 것이였습니다. 부들부들 해당 문제를 풀기 위한 코드를 보도록 하겠습니다. 먼저, dp 함수는 아래와 같습니다. for loop를 돌면서, temp에 app(i, x-i)를 수행한 결과물인 string의 c_str()의 주솟값을 넣습니다. 그리고, temp와 ..
오랫만에 글을 씁니다. 이번 시간에는 파일 포인터를 넘겨주면 파일 디스크립터를 돌려주는 fileno 함수를 배워보겠습니다. 사실 빠른 입출력을 위해 많이 쓴다는 fastio의 write를 배우기 위해서, 배운다는 건 비밀이지만요. 이 함수의 원형은 다음과 같습니다. stdio.h에 선언이 되어 있는 함수입니다. FILE 포인터를 넘겨주면, 그것과 연관된 파일 디스크립터를 돌려주는 역할을 합니다. stdio.h에 보시면 bits/types/FILE.h가 보이는데요. 무엇인지 모르겠지만, 저기에 무언가가 있을 듯 싶으니, 타고 들어가 보겠습니다. 그러면, _IO_FILE이라는 것을 FILE로 재정의를 한 무언가가 보이는데요. 글쎄요. 일단, 이것도 타고 들어가 보겠습니다. 그러면 _IO_FILE 구조체가 보..
fopen을 하고 난 뒤에는 fclose를 호출하라고 합니다. 사실, fopen과 fclose는 한 쌍처럼 따라다닌다고 봐도 무난하긴 하겠네요. 만약에, 닫지 않으면 어떤 일이 일어날까요? 저는, 1.txt를 열기만 하고 닫지는 않을 겁니다. fclose.c를 보겠습니다. 1000번 fopen 함수를 수행합니다. 닫는 것을 호출하지 않습니다. 그리고 나서, file open end를 찍고 계속 루프를 돕니다. 이 정도로 해석하시면 될 듯 싶습니다. 이제 코드를 컴파일 해서 실행시켜 보겠습니다. 그리고 다른 터미널에서 fclose에 대한 것을 보면, pid가 4810임을 알 수 있습니다. proc/4810/fd로 가서, ls를 쳐 보겠습니다. 그러면, 꽤 많은 무언가가 출력됨을 알 수 있습니다. 1.txt..
최근댓글