목록분류 전체보기 (111)
Shine's dev log
C로 코딩을 하다보면 빠질 수 없이 등장하는 것이 바로 함수 이다. 반복적인 동작을 수행하거나 코드의 전체적인 가독성을 위해서 꼭 필요한 것이 바로 함수이다. 오늘은 함수가 어떻게 데이터를 공유하는지 알아보자. 여기서 데이터란 1. 매개변수 값과 2. 리턴 값을 생각해 볼 수 있다. 우선 다음과 같은 예제를 살펴보자 다음과 같은 경우, main() 에서 int형 변수 x와 y를 test라는 함수의 매개변수로 넘겨주었다. 이 때, x와 y의 값이 a와 b로 선언된 변수에 복사되어 들어간다. 또한, a와 b의 합한 값이 sum 으로 선언된 변수에 복사되어 들어간다. 즉, 함수의 매개변수는 직접적으로 변수 자체를 넘겨받는것이 아니라, 변수 속의 값만 복사되어 넘겨지는 것이다. 그렇다면 다음예시를 살펴보자 위의..
C를 처음 배우면 가장 먼저 배우는 것 중에 하나가 바로 배열이다. 배열은 대괄호 연산자 [ ]를 이용하여 굉장히 직관적으로 초기화되고, 사용되기 때문에 사실 별 어려움없이 사용할 수 있다. 하지만, 이후에 포인터를 배우고 배열과 포인터가 밀접하게 연관되어있다는 사실을 알게되면 멘붕에 빠지기도 한다;; 이번에는 배열과 포인터의 관계에 대해 깔끔하게 정리해보도록 하자. #include int main() { int arr[10] = {0, }; print("%d", arr[0]); } 위와같이 int형 변수 10개를 담은 arr라는 배열을 만들어봤을 때, arr[0]의 값을 print하면 당연히 0이 나온다. 하지만, arr[0]이 아닌 arr를 출력하면 뭐가 나올까? #include int main() ..
신입생 시절, 나를 괴롭혔던 문자열에 대하여 제대로 정리해보자. 아까도 말했듯이 C에는 문자열을 직접 다루는 자료형이 없다. 그래서 char의 배열을 사용하여 문자열을 '간접적으로' 나타낸다. 하지만, 리스트와는 다르게 배열은 크기가 고정적이다. 그래서 처음 char배열의 변수를 만들 때, 넉넉하게 크기를 설정해줘야 하는데, 그러다 보면 메모리의 낭비가 발생할 수 있다. 예를들어 char s1[100] 으로 설정된 s1라는 변수에 "hello"라는 문자열로 초기화 시킨다면, h, e, l, l, o, \0 이 6개를 제외한 94개의 칸은 낭비되는 것이다. 그렇다고 무턱대고 배열의 크기를 줄이자니 데이터가 잘릴 위험이 있기 때문에 조심스럽다. 이러한 문제점을 해결할 수 있는 것이 바로 char*이다. 예를..