목록Backend/C (6)
elevne's Study Note

C 에서 함수호출 시 전달되는 인자의 값은 매개변수에 복사가 된다. 실제로 함수에 전달되는 값은 변수 그 자체가 아니라, 그 변수에 저장된 값인 것이다. 함수에 사용되는 변수는, 기존의 정의해둔 변수와 값만 같은 별개의 변수라고 생각하면 된다. C 에서는 함수호출 시 인자로 배열을 통째로 전달해줄 수 없다. 매개변수로 배열을 선언할 수 없기 때문이다. 매개변수로 배열을 선언하는 것이 허용되지 않기 때문에, 배열의 주소 값을 전달하는 방식을 사용한다. 이 때, 포인터 변수를 사용할 수 있는 것이다. 아래와 같은 예제코드를 작성해볼 수 있다. #include void showArrayElem(int* param, int len) { int i; for (i=0; i

C 에서 배열의 이름은 포인터이다. 단, 그 값을 바꿀 수 없는 상수 형태의 포인터라고 한다. 이에 대한 의미는 아래 코드를 통해서 확인해볼 수 있다. #include int main() { int arr[3] = {1, 2, 3}; printf("배열의 이름: %p \n", arr); printf("FIRST: %p \n", &arr[0]); printf("SECOND: %p \n", &arr[1]); printf("THIRD: %p \n", &arr[2]); return 0; } 위 코드의 출력결과를 통해 int 형 배열요소간 주소 값의 차이는 4 바이트라는 것을 확인할 수 있다. 이는 모든 배열 요소가 메모리 공간에 나란히 할당된다는 것을 보여준다. 또, 배열의 첫 번째 바이트 주소값과 배열의 이름..

C 언어에서는 포인터를 이용하여 컴퓨터의 메모리에 직접 접근이 가능하다고 한다. 아래와 같이 변수가 선언되었을 때 char ch1 = 'A', ch2 = 'Q'; int num = 7; 총 6 바이트 ( 1(char) + 1(char) + 4(int)) 가 메모리 공간에 할당되는 것이다. 이 때, 1 바이트 메모리 공간을 단위로 하나의 주소 값이 할당되며, 주소 값도 1 씩 증가하는 '메모리 주소 값'이 같이 배정된다. C 언어에서는 시작 번지만을 가지고 위치를 표현하게 되는데, 이는 왜냐하면 자료형 당 배정 바이트 수는 정해져있기 때문에 끝이 어디든지 쉽게 계산할 수 있기 때문이다. 이 때, 이 메모리 주소 값 또한 정수의 형태를 띄는데, 이 메모리 주소 값의 저장을 위해 마련된 변수가 바로 '포인터 ..

C 언어에서는 배열을 아래와 같이 선언해줄 수 있다. #include int main() { int oneDimArray[4]; } 위 코드에서 int 는 배열을 이루는 요소들의 자료형, 4 는 배열의 길이를 의미한다. 배열의 각 요소 값을 지정해주는 방식은 아래와 같다. #include int main() { int oneDimArray[2]; oneDimArray[0] = 0; oneDimArray[1] = 1; for (int i = 0; i < 2; i++){ printf("%d\n", oneDimArray[i]); } } 위와 같이 하나씩 지정하지 않고, 배열의 선언과 동시에 원하는 값으로 초기화해줄 수도 있다. 이 때는 중괄호를 사용한다. #include int main() { int oneD..

C 언어에서도 Java 와 동일한 방식으로 while 문을 사용하여 반복문을 구현할 수 있다. #include int main() { int num = 0; while (num j) ? i : j; printf("%d", k); } 함수를 작성하는 방법도 (이전 글에서 알아보았던 것처럼) Java 와 매우 유사하다. 반환값이 없으면 함수 앞에 void 를 붙여주고, 있을 때에는 반환 값의 자료형을 붙여준다. #include int Add(int num1, int num2){ return num1 + num2; } void showAddResult(int num){ printf("Add Result: %d\n", num); } int ReadNum(){ int num; scanf("%d",&num); re..

C 언어 기초 공부를 시작하였다. 우선 항상 그래왔듯이 "Hello World" 부터 찍어보았다. (에디터는 JetBrains 의 CLion 을 사용하였다) #include int main() { printf("Hello, World!\n"); return 0; } Java 와 함수의 형태가 유사하게 이루어져 있는 것을 확인하였다. 출력형태(int), 함수이름(main), 입력형태(빈 값/void) 가 함수에 지정되어 있다. Java 와 마찬가지로 문장의 끝마다 ";" 세미콜론을 붙여주고, 문자열은 큰따옴표 안에 넣어준다. 또, 코드 상단에 "#include " 라고 쓰여있는 줄이 있다. 이는 표준함수들(printf 등)의 호출을 위해서 헤더파일 선언을 해준 것이다. 위 예에서는 studio.h 라는, ..