strcat 함수는 문자열을 이어 붙이는 함수입니다. char *str(char *dest, const char *ori); dest에 ori를 붙입니다. 어렵지 않네요? 먼저 시간 복잡도 먼저 분석해 보도록 합시다. 보통, string 뒤에 붙이는 것은, O(|ori|)인 경우가 많기는 해요. 끝 위치만 알고 있다면, 그 위치에서부터 뒤로 붙여버리면 되거든요. 단, 공간이 충분하다는 전제 하에서요. 물론, Java의 StringBuffer나 StringBuilder 같은 경우에는, 크기가 변할 수 있는, 동적 배열이긴 합니다. 그러니, 공간이 부족하다 싶으면 expand를 호출을 할 거고요. 그러면, 이 친구는 어떻게 동작할까요? 끝 위치를 저장하고 있을까요? 이 코드는 단순합니다. str에 계속 "a..
코딩/C 검색 결과
C언어에서 2차원 배열은, 어떻게 메모리 상에 저장이 될까요? 오늘은 이 부분만 집중적으로 보도록 하겠습니다. 먼저, int형 배열인, arr[3][4]를 선언하였습니다. 그러면 메모리 상에 어떻게 생성이 될까요? 일단 행렬로 치면, 3행 4열이라고 볼 수는 있는데요. & 연산자를 쓰면, 현재 주솟값을 볼 수 있는데요. 예제 프로그램을 보면서 이해를 해 보도록 합시다. 먼저, 예제 1을 봅시다. 3행 4열의 배열을 선언하였습니다. 그리고 2중 for loop를 돌면서, 저는 i와 j와 arr[i][j]의 주솟값을 출력하고 있습니다. 그러면 어떻게 결과가 나올까요? 위와 같이 나오는데요. arr[0][0], arr[0][1], arr[0][2], arr[0][3], arr[1][0], ... 순으로 주솟값..
저번 시간에 배열에 대해서 다루었습니다. 이번에는 무엇에 대해 다루어 볼까요? 간단하게 문자열에 대해서 다뤄 보도록 하겠습니다. char형은 문자를 저장합니다. 그러면 그것들을 연속적으로 모아놓은 것은 무엇일까요? 예를 들자면 'c', 'h', 'o'가 모여서, "cho"가 되고, 'd', 'o', 'g'가 모여서 "dog"가 됩니다. 이것을 우리는 문자열이라고 합니다. 그러면, 문자열의 끝은 어떻게 판단할까요? 이게 문제가 될 수 있어요. 배열에서 끝은 어떻게 판단하나요? 사실, 이것은 배열의 크기에, 각 원소의 크기로 나누면 될 겁니다. 이 부분은 크게 어려울 건 없어 보여요. 그런데, 이런 경우를 생각해 봅시다. 이 때에는 출력 결과가 어떻게 나오나요? 저는 main 함수 안에, str 배열을 선언..
보통 제어문을 배우시고, 함수로 넘어가는 경우가 많아요. 저는 C언어 배열 먼저 다루도록 하겠습니다. 함수는 조금 뒤에 배워도 크게 문제는 없습니다. 먼저 array는 같은 자료형을 여러 개 묶어놓은 자료 구조 정도로 생각하면 좋아요. 그런데, 그걸 어떻게 묶느냐가 문제입니다. 이 친구는 시작 위치를 기준으로 연속이 되게 저장이 되어 있어요. 흔히 이런 말을 들어보신 적이 있을 겁니다. array는 삽입, 삭제는 매우 오래 걸리지만, x번째에 있는 원소는 굉장히 빠르게 찾을 수 있다. 그 이유는 간단합니다. 메모리 상에 연속적으로 저장이 되기 때문입니다. 즉, 실제로 arr[2]에 접근하기 위해서, arr의 기준 위치를 알아냅니다. 그림에서는 0x80번지입니다. 그 다음에, 첨자가 2가 붙었기 때문에, ..
ps를 하면서, switch문은 그렇게 많이 작성하지는 않았습니다. 오히려 if, else if문을 가지고 많이 작성하거나, 배열로 많이 처리를 했는데요. 그래도 알아두면 유용한 조건문입니다. 대략적인 문법은 아래와 같습니다. 여기서 default는, 정수 변수가 정수값(1), ... , 정수값(n)이 아닐 때, 걸립니다. 이 때에는 실행(n+1)이 수행되고 switch문이 끝날 겁니다. 괄호에 정수 변수가 하나 들어갑니다. 예를 들어서 op나, cc와 같은 것들이 그러한 예입니다. 그리고, case 정수값(i)는 정수 변수의 값이 정수값(i)일 때, 걸립니다. 즉, 분기가 되는 위치 정도로 생각하시면 좋겠네요. 이것을 그림으로 쉽게 그려 드리면 다음과 같습니다. 예를 들어, op가 switch문의 정수..
최근댓글