개인공부(113)
-
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 -
C언어 - 지역변수와 스택
프로그램이 실행되면 최소한의 필요한 메모리를 사용하기 시작한다.(...은 프로그래머는 알기힘들고 알 필요없는 것들) 1. main()함수 안의 지역변수 int a가 스택에 쌓이게 된다. // a 2. int_max 함수를 호출하고 그안의 int m을 a위에 쌓는다.( 스택에 같이 쌓여있음로 포인터를 이용해서 a를 건드릴수 있다.) //a m 3. 연산이 끝나고 m이 빠지고 다시 a만 남는다. // a 4. 그다음 내부에 들어가 int b를 읽어 b가 쌓인다. // a b 5. 다시 int_max함수를 호출하고 int m을 읽어 그위에 쌓인다. // a b m 6. int_max의 연산이 끝난후 m이 스택에서 빠진다. // a b 7. 그 후 내부의 int b를 읽어들여 그 바깥의 int b 위에 쌓인다...
2020.11.10 -
C언어 - 변수의 영역(scope)과 지역변수(Local)
int main() { int a; // {}영역 안에서만 사용되서 지역변수 a = int_max(1,2); printf("%d\n", a); printf("%p\n", &a);// & 는 주소를 가르킨다. //%p p는 포인터이다. 고로 a의 주소값을 프린트해준다. { int a;// main()함수의 지역변수가 아닌 내부의 다른 a변수 a = int_max(4,5); printf("%d\n", a); printf("%p\n", &a); int b =123; } printf("%d\n", a); printf("%p\n", &a); return 0; } // 하지만 내부의 새로운 a를 선언하면 내부의 a는 다른변수이다. int main() { int a; // {}영역 안에서만 사용되서 지역변수 a ..
2020.11.10 -
C언어 - 함수의 프로토 타입
블랙박스로서의 함수. void print_multiple_chars(char c, int n_stars, bool endl); 함수가 블랙박스처럼(내부적으로 어떻게 돌아가는지는 모르지만) 어떤 인자를 넣어주면 어떻게 돌아가는지 유추할수 있어야한다. 구현내부가 주석처리가 되어 컴파일은 되지만 링킹은 되지 않는다. 프로토 타입만 있어도 (몸통, 구현부가 없어도) 컴파일이된다. 그리고 그 몸체는 코드 어딘가에만 있으면 된다. void print_centered_str(char); void print_multiple_chars(char, int, bool); 선언부에서는 자료형만 있고 변수명이 없어도 빌드가 된다. 출처 : 홍정모의 따라배우는 C언어
2020.11.10