목록C언어 (20)
사이먼's 코딩노트
[포인터를 사용하는 이유] 변수는 본질적으로 공간이다. 공간은 본질적으로 옮길 수가 없다. 그렇게 때문에 어떤 변수에 있는 값을 누군가에게 공유할 때는 주소(포인터)를 사용할 수 밖에 없다. 주소가 바로 포인터이다. 주소를 담는 변수는 포인터 변수라고 한다. [2중 포인터] 2중 포인터는 말그대로 주소를 2번 옮겨서 어떤 변수의 있는 값을 공유하는 것이다. 아래는 2중포인터를 활용하여 change라는 함수를 통해 기존에 있던 값을 바꾸는 코드이다. #include void change(int** num) { **num = 50; } int main(void) { int x = 20; int* p = &x; printf("change 함수 호출하기 전의 x : %d\n", x); change(&p); pr..
이번엔 포인터와 관련된 문제들을 풀어봅시다. 각 문제에는 문제와 조건이 있으니 해당 조건에 맞춰서 문제를 해결해봅시다. [문제 1] 변수 i의 값을 해킹해주세요. 조건 1 : i의 값을 직접 바꾸는 것은 안됩니다. 조건 2 : `i = 50;` 은 안됩니다. #include // 8바이트 int main(void) { int i = 30; int i2 = 30; int* p = &i; printf("p의 주소값 : %ld\n", (long)p); printf("포인터 p의 값 : %d\n", *p); *p = 50; printf("i : %d\n", i); // 출력 => i : 50 return 0; } 변수 i를 직접적인 수정말고 포인터를 이용해서 값을 바꿔야한다. 포인터 변수 p를 생성하여 i의 주..
[포인터] [컴퓨터의 구성] 1. CPU : 연산 기능 데이터 처리속도 : 매우 빠름 Read / Write 속도 : 매우 빠름 2. L1 Cache(캐시) 메모리 : 저장 기능 저장용량 : 작음 (보통 8 ~ 64KB) Read / Write 속도 : 매우 빠름 (L2보다 빠름) 3. L2 Cache 메모리 : 저장 기능 저장 용량 : 작음 (보통 64KB ~ 4MB) Read / Wrtie 속도 : 매우 빠름 4. 메모리 : 저장 기능 저장 용량 : 작음 (8GB) Read / Write 속도 : 빠름 5. 하드디스크 : 저장 기능 저장 용량 : 큼 Read / Write 속도 : 느림 6. PC를 관리하는 소프트웨어 : 운영체제(OS) OS가 메모리를 관리한다. 우리가 만든 C 프로그램은 운영체제의..
지난번에 이어 함수와 관련된 몇 가지 문제를 더 풀어보자. [문제 1] 입력받은 숫자가 10이라고 할때 1부터 10 사이에 존재하는 모든 소수의 개수와 합을 출력하는 함수를 구현해보자. #include #pragma warning (disable: 4996) int is_prime_number(int num) { if(num < 2) { return 0; } for(int i = 2; i < num; i++) { if(num % i == 0) { return 0; } } return 1; } int get_1_to_n_prime_numbers_count(int n) { int count; for(int i = 1; i 1부터 1000사이에 존재하는 소수의 합 : 76127 number = 2000; co..
이번엔 함수와 관련된 문제들을 풀어봅시다. 모든 문제는 main 함수 안에 코드는 모두 작성되어 있는 상태에서 새로운 함수를 어떻게 구현하는지를 풀어보는 것이다. [문제 1] 입력받은 정수가 짝수인지 아닌지 판별해주는 함수를 구현해보자. #include int is_even(int num) { if(num % 2 == 0) { return 1; } else { return 0; } return 0; } int main(void) { printf("17은(는) 짝수인가요? : %d\n", is_even(17)); printf("500은(는) 짝수인가요? : %d\n", is_even(500)); return 0; } main 함수 안에 출력문에서 is_even() 라는 함수에 17, 500이라는 인자를 넣..
[함수] C언어에서는 main 함수 외에 사용자 지정으로 함수를 정의할 수 있다. 실제 코드는 main 함수에서 실행되기 때문에 main 함수에서 개발자가 지정한 임의의 함수가 실행되기 위해서는 반드시 main 함수 위에 함수를 생성해야한다. [case #1 - 구구단 5단 함수 호출] 다음 예시는 구구단 5단을 구현하는 코드이다. #include void print_5dan() { int dan = 5; printf("== %d단 ==\n", dan); for(int i = 0; i
[반복문] 예를 들어 1부터 1000까지의 숫자를 하나씩 출력해보자고 했을 때, 지금까지 배운 지식으로는 printf문을 통해서 일일이 1000개를 작성해야한다. 하지만 이것은 굉장히 비효율적이고 귀찮은 일이다. 이런 작업을 훨씬 수월하게 동작하게 위해서 우리는 반복문을 활용해야한다. 반복문은 크게 for문과 while문 두 가지로 나뉠 수 있다. 두 가지는 문법이 다를 뿐 의미는 동일하다. [while] 아래는 while문의 예시로서 i라는 변수가 5이하 일때는 해당 숫자를 출력문으로 출력한다. #include int main(void) { int i = 1; while (i
[연산자] [사칙연산] + : 더하기 - : 빼기 * : 곱하기 / : 나누기 [논리연산] == : 같다 != : 다르다 > : 크다(초과) = : 크거나 같다(이상) = 20) { prinf("성인입니다."); } return 0; } if를 하나씩 쓰게되면 프로그램 상 위에서 아래로 내려가면서 전부 체크를 하게 되어있다. 프로그램의 효율성이나 실행 속도를 빠르게하기 위해서는 상황에 맞춰 조건문을 하나로 묶어주는 것이 좋다. 하나로 묶는다는 의미는 최초 작성한 조건문 if 아래에 else if를 작성하는 것이다. 정해진 조건 중에 if나 else if에 참이 없을 경우, 가장 마지막에 예외를 막기위한 else 조건문을 작성한다. else는 조건부를 작성하지 않아도 된다. if문 안..
[변수] 변수는 데이터를 저장할 수 있는 특정 공간이라고 생각하면 좋다. 변수에는 공간이 매우 작기 때문에 값을 하나만 넣을 수 있다. C언어에서 정수 타입을 가진 변수를 선언하고 싶다면 int x; 와 같이 작성하면 된다. 여기서 말하는 int는 integer의 줄임말이며 정수를 뜻한다. 변수 2개를 선언하고 각 변수에 숫자를 부여하는 구조는 아래와 같다. #include int main(void) { int x; // x라는 변수 선언 int y; // y라는 변수 선언 x = 30; // x에 30이라는 숫자를 넣는다. y = 20; // y에 20이라는 숫자를 넣는다. printf("x의 값은 %d, y의 값은 %d이다", x, y); return 0; } 위 예시에서 // 하고 뒤에 씌여진 문장..
[C언어 기본 구조] c언어 파일을 만들기 위해선 main.c와 같이 확장자가 c로 끝나도록 파일을 생성해야한다. 기본적으로 프로그래밍 언어는 위에서 부터 아래로 차례대로 1줄씩 실행된다. 출력문을 포함한 C언어의 기본적인 구조는 아래와 같다. #include int main (void) { printf("Hello World!"); return 0; } 여기서 #include는 포함한다, 불러온다 라는 뜻을 가지고있다. 그렇다면 무엇을 불러오느냐? 바로 라는 헤더파일을 불러온다는 뜻이다. stdio.h는 표준 입출력과 관련된 기능을 가진 헤더파일로 Standard Input/Output 을 뜻한다. 표준 입력은 키보드 입력, 표준 출력은 모니터 출력을 의미한다. int main은 메인 함수를 뜻하고, ..