C언어에서 static 변수는 특이한 속성을 가지고 있습니다. 반절 정도는 지역 변수, 반절은 전역 변수 속성을 지니고 있는데요. visible한 범위는 블록 내이지만. 메모리는 프로그램이 종료가 될 때 까지 해제가 되지 않아요. 의외로 많은 함수들이, 내부에서 static, 그러니까 정적 변수를 쓰기도 합니다. 레퍼런스 시간에 몇 번 언급을 했을 거에요. 예제 프로그램 1개만 분석해 보겠습니다. 먼저 main 함수는 foo를 2번 호출합니다. 다음에, foo는 정적 변수인 atari를 가지고 있는데요. 10번째 줄에도 선언이 되어 있고, 12번째 줄에도 선언이 되어 있습니다. 10번째 줄과 16번째 줄에 주석이 달려 있네요. 일단 프로그램을 실행해 봅시다. atari 라는 변수가 not decleare..
코딩 검색 결과
오늘은, 간단하게 지역변수에 대해서 알아보도록 하겠습니다. 그 전에, 변수를 visible 할 수 있는 범위, 즉 scope하고, life time에 대해서 집중적으로 보도록 합시다. 8번째 줄에 정의된 t는 어디에 선언이 되었나요? foo 라는 함수 내부에 정의가 되었습니다. block 내부나, 프로그램 단위 (함수)에 정의된 변수들을 지역 변수라고 부릅니다. 그러면, 이것이 어떠한 특징을 가지는지, 위에 있는 코드를 한 번 실행해 봅시다. 결과가 0이 나오는데요. 차근 차근 설명해 보겠습니다. 먼저, 4번째 줄의 int t = 0; 이라는 문장을 실행하면, 변수 t에 0이 대입이 됩니다. 그러면 이렇게 상황을 그릴 수 있습니다. 다음에, foo(t)를 호출하게 되는데요. 6번째 줄에 보면 매개변수 a..
strcat 함수는 문자열을 이어 붙이는 함수입니다. char *str(char *dest, const char *ori); dest에 ori를 붙입니다. 어렵지 않네요? 먼저 시간 복잡도 먼저 분석해 보도록 합시다. 보통, string 뒤에 붙이는 것은, O(|ori|)인 경우가 많기는 해요. 끝 위치만 알고 있다면, 그 위치에서부터 뒤로 붙여버리면 되거든요. 단, 공간이 충분하다는 전제 하에서요. 물론, Java의 StringBuffer나 StringBuilder 같은 경우에는, 크기가 변할 수 있는, 동적 배열이긴 합니다. 그러니, 공간이 부족하다 싶으면 expand를 호출을 할 거고요. 그러면, 이 친구는 어떻게 동작할까요? 끝 위치를 저장하고 있을까요? 이 코드는 단순합니다. str에 계속 "a..
어제, datetime에 대해서 잠깐 언급을 했었습니다. 어떻게 하면 두 시간의 차를 잘 계산할 수 있을까요? 예전에 time 함수를 이야기 할 때, 1970년 1월 1일 UTC+0일 때부터 현재까지 흐른 시간이 몇 초인지를 리턴해 준다고 했었습니다. mysql도 이와 동일한 일을 하는 함수가 있습니다. 그 함수는 unix_timestamp입니다. 사용 방법은 아래와 같습니다. 인자로 Date나, Datetime과 같은 것을 넘겨주거나, 아니면 인자를 넘기지 않는 방법이 있습니다. 이 글에서 말하는 기준 시간은 1970년 1월 1일 0시 0분 0초 UTC+0인데요. 제 timezone이 KST+9로 설정이 되어 있어요. 그러면, 실제로 UTC+0 시간대를 쓰는 지역에서는 1970년 1월 1일 0시 0분 ..
mysql에서, 시간을 다루는 데이터 형도 꽤 많습니다. 프로그래머스에, 이런 문제가 나왔었습니다. 테이블 2개가 주어집니다. 입양을 간 동물에 대한 Table이 주어지고, 보호소에 온 동물들에 대한 Table이 주어집니다. 그런데 오늘 제가 날짜에 대해서 합니다. 그러면. 대충 어떤 쿼리가 들어왔는지 감이 오시나요? datetime이 어떤 형인지 봅시다. 먼저, 아래 쿼리를 생각해 봅시다. '2019-09-19 00:00:00'이라는 데이터는 varchar형입니다. 문자열입니다. 저는 이것을 datetime 형으로 변환을 할 건데요. 이를 위해서 cast 함수를 씁니다. 그러면, 이 값이 datetime으로 들어갔을 건데요. Binary가 어떻게 들어갔는지 봅시다. 헥사로 32, 30, 31, 39. ..
최근댓글