본문 바로가기
반응형

C29

허상 포인터 (Dangling Pointer) C, C++ 전체 링크 아래와 같은 코드를 실행해보자. #include #include void test() { int* ptr = (int*)malloc(sizeof(int) * 10); /* heap 할당 */ printf("address of ptr : %x\n", ptr); for (int i = 0; i < 10; i++) ptr[i] = i; for (int i = 0; i < 10; i++) printf("%d ", ptr[i]); putchar('\n'); free(ptr); for (int i = 0; i < 10; i++) printf("%d ", ptr[i]); putchar('\n'); for (int i = 0; i < 10; i++) ptr[i] = i; for (int i = .. 2021. 7. 18.
구조체의 크기 C, C++ 전체 링크 아래와 같은 구조체 st1이 있다. #include typedef struct st1 { char a; short b; int c; char d; long long e; char* f; int* g; }; int main(void) { printf("char a size : %d\n", sizeof(char)); printf("short b size : %d\n", sizeof(short)); printf("int c size : %d\n", sizeof(int)); printf("char d size : %d\n", sizeof(char)); printf("long long e size : %d\n", sizeof(long long)); printf("char* f size : .. 2021. 6. 19.
단락 평가 Short Circuit C, C++ 전체 링크 논리 연산에서 뒤의 수식과 상관없이 이미 판정 결과가 나온다면, 뒤의 수식은 수행될 필요가 없다. AND 연산 A && B && C 에서 A가 false라면, B와 C는 true/false 여부에 상관없이 false다. OR 연산 A || B || C 에서 A가 true라면, B와 C는 true/false 여부에 상관없이 true다. C/C++에서 short circuit이 작동하는지 확인해보자. 먼저 아래의 코드를 실행해서 printf의 return 값을 알아보자. #include int main(void) { int pf1 = printf("hello\n"); int pf2 = printf("world!!\n"); printf("pf1 : %d, pf2 : %d\n", pf1,.. 2021. 5. 11.
typedef 선언 C, C++ 전체 링크 typedef를 이용하면 기존에 존재하는 자료형의 이름을 재정의 할 수 있다. 예를 들어 unsigned long long int type을 선언한다고 가정하자. 그러면 새로운 변수를 쓸 때마다 매번 "unsigned long long int"를 선언해야 한다. 하지만 typedef로 unsigned long long int를 ull로 재정의하면 한결 편해진다. #include typedef unsigned long long int ull; int main(void) { ull a = 1ull 2021. 5. 2.
제곱근 Square root : 바빌로니아 법 (The Babylonian Method) C, C++ 전체 링크 바빌로니아 법은 임의의 수의 제곱근에 빠르게 수렴하는 수열을 만들어 근삿값을 구하는 방법이다. 이 수열을 계속해서 반복하면 x가 √a가 된다. 먼저 PRECISION_COUNT를 5로 정의하고, 바빌로니아 법을 5번 반복해보자. printf에 .[Number]f로 옵션을 주면 Number의 자릿수만큼 소수점을 출력할 수 있다. #include #define PRECISION_COUNT (5) double sqrt(int num) { double x = num / 2.0; for (int i = 0; i < PRECISION_COUNT; i++) { x = (x + (num / x)) / 2; /* xn+1 = (xn + (num / xn)) / 2 */ } return x; } i.. 2021. 4. 9.
C++ ofstream을 이용한 FILE 출력 C, C++ 전체 링크 C++에서 파일을 출력하는 방법 중 하나는 ofstream이다. ofstream은 fstream header와 namespace std를 선언하면 쓸 수 있다. 먼저 ofstream type 변수를 하나 선언한다. open 메서드를 이용하여 출력할 파일명을 넣는다. 파일명이 없다면 새로 파일을 만들지만, 솔루션 탐색기에는 따로 추가해야한다. 출력할 파일이 정해졌으면 " 2021. 3. 18.
scanf로 문자열과 공백 받기 C, C++ 전체 링크 아래와 같은 input.txt가 있다고 하자. 문자열은 보통 c에서 scanf로 받지만 공백이 있는 경우는 까다롭다. scanf에 더이상 읽을 파일이 없을 경우 -1(EOF : End of File)을 return하기 때문에 txt의 끝은 알 수 있지만, input은 공백을 기준으로 file 입력을 끊어버린다. #include int main(void) { char input[100]; while(scanf("%s", input) != EOF) { printf("%s\n", input); } return 0; } 공백을 기준으로 input에 read 되는 것을 알 수 있다. 이러한 점을 방지하기 위해, scanf에 " %[^\n\r]" 옵션을 넣어주면, 공백을 무시하고 한 줄을 입.. 2021. 3. 16.
C, C++ - 정수로된 FILE 입력 C, C++ 전체 링크 C, C++에서 FILE을 정수로 된 FILE을 읽어보자. input.txt는 아래와 같다. 코드는 아래와 같다. #include #define INPUT_FILE "input.txt" int main(void) { FILE *fp = fopen(INPUT_FILE, "r"); if (fp == NULL) { printf("Wrong Input : %s\n", INPUT_FILE); return 0; } int input; while (fscanf(fp, "%d", &input) != EOF) { printf("%d\n", input); } return 0; } input.txt file을 define으로 정의해서 다른 코드에서도 관리하기 쉽도록 한다. FILE pointer fp.. 2021. 3. 14.
유일한 수 두개 알고리즘 문제 전체 링크 judge.koreatech.ac.kr/problem.php?id=1074 유일한 수 문제의 응용 버전이다. 모든 수가 짝이 있으나 단 2개의 수만 짝이 없다. 유일한 수 문제대로 풀면 짝이 있는 수는 자연스럽게 제거할 수 있지만, 짝이 맞지 않는 두 수가 xor 연산되어 있어서 답을 구할 수 없게 될 것 같다. 하지만 여전히 xor 연산을 이용해서 문제를 해결할 수 있다. 먼저 두 수가 다르다는 것은, 최소 1 bit가 다르다는 뜻이 된다. 즉, 모든 N을 xor한 후, 어떤 다른 1 bit를 기준으로 1 bit가 있는 경우는 on에 xor을 1 bit가 없는 경우는 off에 xor을 하면 두 수가 분리된다. 예를 들어서 두 수가 3과 7이라고 하자. 0011(3)과 0111(.. 2021. 3. 1.
반응형