오늘은, 간단하게 지역변수에 대해서 알아보도록 하겠습니다. 그 전에, 변수를 visible 할 수 있는 범위, 즉 scope하고, life time에 대해서 집중적으로 보도록 합시다. 8번째 줄에 정의된 t는 어디에 선언이 되었나요? foo 라는 함수 내부에 정의가 되었습니다. block 내부나, 프로그램 단위 (함수)에 정의된 변수들을 지역 변수라고 부릅니다. 그러면, 이것이 어떠한 특징을 가지는지, 위에 있는 코드를 한 번 실행해 봅시다. 결과가 0이 나오는데요. 차근 차근 설명해 보겠습니다. 먼저, 4번째 줄의 int t = 0; 이라는 문장을 실행하면, 변수 t에 0이 대입이 됩니다. 그러면 이렇게 상황을 그릴 수 있습니다. 다음에, foo(t)를 호출하게 되는데요. 6번째 줄에 보면 매개변수 a..
C언어 검색 결과
strcat 함수는 문자열을 이어 붙이는 함수입니다. char *str(char *dest, const char *ori); dest에 ori를 붙입니다. 어렵지 않네요? 먼저 시간 복잡도 먼저 분석해 보도록 합시다. 보통, string 뒤에 붙이는 것은, O(|ori|)인 경우가 많기는 해요. 끝 위치만 알고 있다면, 그 위치에서부터 뒤로 붙여버리면 되거든요. 단, 공간이 충분하다는 전제 하에서요. 물론, Java의 StringBuffer나 StringBuilder 같은 경우에는, 크기가 변할 수 있는, 동적 배열이긴 합니다. 그러니, 공간이 부족하다 싶으면 expand를 호출을 할 거고요. 그러면, 이 친구는 어떻게 동작할까요? 끝 위치를 저장하고 있을까요? 이 코드는 단순합니다. str에 계속 "a..
C언어로 코딩하실 때, 파싱 문제를 만날 때 가장 많이 쓰는 함수는 strtok입니다. 물론, 저는 strchr 조합을 더 많이 쓰긴 합니다만. 익혀두면 편한 쪽은 오늘 소개하는 함수입니다. 함수 원형을 소개하지 않겠습니다. 거의 정석처럼 사용되는 패턴 정도만 소개하도록 하겠습니다. 먼저 '#'을 구분자로 끊어내 봅시다. 보시면 strtok의 1번째 인자에는 parsing을 할, 대상체가 들어가 있습니다. 예를 들자면, "abcd#efg#hijk"와 같은 것들입니다. 그리고, 2번째 인자에는 구분자 집합이 들어가는데요. 여기에서 우리는 '#'을 기준으로 자를 것이므로 '#'만 넣었음을 알 수 있습니다. 12번째 줄이 핵심인데요. strtok는 문자열의 포인터를 리턴해 줍니다. 문자열의 끝에 도달하면, N..
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 배열을 선언..
최근댓글