개인공부/C언어(71)
-
C언어 : 포인터의 작동원리
드디어 왔다.. 내가 C언어를 공부하는 이유.. 제발 골수까지 빨아먹어 이해하고 싶다. int a; 메모리주소를 가지고 있는 a와 그 메모리가 얼마나 공간을 차지할것이냐 정하는 자료형 int (4 bytes) a = 7; //a라는 변수에 7을 대입한다. 실제 컴퓨터 내부에서는 a라는 변수의 주소 128로 시작해서 131에 끝난다. 그 공간에 7이라는 데이터를 저장. a를 불러오고 b를 불러오면 cpu내의 임시공간에 저장되고 연산된다. 15라는 연산값이 나오면 cpu 임시공간에 저장되어 있다가 c의 메모리주소로 가서 4바이트치 메모리에 결과값 15를 저장한다. 내부적으로 변수가 주소를 사용하고 있다면, 그주소를 실제로 알고 싶다면 어떻게 해야 할까? 주소 연산자를 사용한다! &가 붙으면 단항연산자로 실행..
2020.11.11 -
C언어 - 헤더파일 만들기
헤더파일 #pragma once // header guard #include void print_hello(); void print_hi(); void print_str(char* str); // assume that we have many more longer functions 헤어파일 구현한 c파일 #include "my_print_functions.h" void print_hello() { printf("Hello\n"); // many more lines } void print_hi() { printf("Hi\n"); // many more lines } void print_str(char* str) { printf("%s\n", str); } 헤더를 불러와서 main()에서 사용. #define..
2020.11.11 -
C언어 - 피보나치 예제와 재귀 호출의 장단점
#define _CRT_SECURE_NO_WARNINGS #include /* Fibonnaci sequence 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ..... 맨앞의 숫자는 1 두번째 숫자는 1 세번째 숫자는 맨앞의 수 그리고 그앞의 수 1을 더해서 2 네번째는 세번째 숫자2와 두번째 숫자 1을 더해 3 다섯번째 숫자 5는 2+3의 결과 ....... 고로 자기 앞앞의 숫자와 앞의 숫자를 더한것. ex) fibonacci(5) = 3 + 2 = fibonacci(4) + fibonacci(3) ex) fibonacci(6) = 8 = 5 + 3 = fibonacci(5) + fibonacci(4) */ int fibonacci(int number); int mai..
2020.11.11 -
C언어 - 이진수 변환 예제
#define _CRT_SECURE_NO_WARNINGS #include /* 10 10 / 2 = 5, remainder = 0 5 / 2 = 2, remainder = 1 2 / 2 = 1, remainder = 0 1 / 2 = 0, remainder = 1 */ void print_binary(unsigned long n); void print_binary_loop(unsigned long n); int main() { unsigned long num = 10; print_binary_loop(num); print_binary(num); return 0; } //Note : printing order is reversed! void print_binary_loop(unsigned long num)..
2020.11.11 -
C언어 - 팩토리얼 예제 (Factorial)
loop vs recursion factorial : 3! = 3 * 2 * 1, 0! = 1 5! = 5 * 4! = 5 * 4 * 3! = 5 * 4 * 3 * 2! = 5 * 4 * 3 * 2 * 1! #define _CRT_SECURE_NO_WARNINGS #include long recursive_factorial(num); long loop_factorial(int n); int main() { int num = 5; printf("%d\n", loop_factorial(num)); printf("%d\n", recursive_factorial(num)); return 0; } long loop_factorial(int n) { long ans; for (ans = 1; n > 1; n--) ..
2020.11.11 -
C언어 - 재귀 호출
void my_func(int); int main() { my_func(1); return 0; } void my_func(int n) { printf("Level %d, address of variable n = %p\n", n, &n); my_func(n +1); } my_func가 자신을 호출하고 있다. 호출때마다 새로운 메모리를 차지하기 때문에 문제다. void my_func(int n) { printf("Level %d, address of variable n = %p\n", n, &n); if(n < 4 ) my_func(n +1); } 종료될 조건을 같이 구현해줘야한다. 조건이 충족되지 않으면 종료된다. void my_func(int n) { printf("Level %d, address o..
2020.11.10