개인공부/C언어(71)
-
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 -
C언어 - 함수가 필요할 때
프로그램을 작성할땐 2가지를 신경써야한다. 1. 일반화라는 관점에서 프로그램이 여러가지의 경우에 대해서 쉽게 작동할수 있도록 개선해나가야 함. 2. 같은 기능이 여러번 나오면 안된다. (유지보수가 어렵기 때문) #define _CRT_SECURE_NO_WARNINGS #include #include #define WIDTH 20 #define NAME "Cho Yi Sak" #define ADDRESS "Seoul, Korea" void print_bar(int n_stars) { for (int i = 0; i < n_stars; i++) printf("*"); printf("\n"); } int main() { print_bar(WIDTH); printf("%s\n", NAME); printf("%s..
2020.11.10 -
C언어 - 표준 입출력 함수들
int main(){ int ch; //ch = getchar(); // buffer //putchar(ch); //while (ch != '\n')// 줄바꿈을 입력했다면 실행종료 while ((ch=getchar()) != '\n') { putchar(ch); //ch = getchar(); } putchar(ch); return 0; } 버퍼를 이용해서 한글자씩 처리하지 않는다. 출처 : 홍정모의 따라배우는 C언어
2020.11.10 -
C언어 - 배열과 런타임 에러
#define NUM_DAYS 365 int main() { char my_char[] = "Hello, World!"; int daily_temperature[NUM_DAYS]; // int[365] double stock_prices_history[NUM_DAYS];// double[365] printf("%zd\n", sizeof(stock_prices_history));// 2920 printf("%zd\n", sizeof(double) * NUM_DAYS);// 2920 double 사이즈의 메모리가 365개 printf("%zd\n", sizeof(stock_prices_history[0]));// 8 return 0; } int main() { int my_numbers[5]; // arra..
2020.11.10