2022. 12. 2. 07:16ㆍC언어 복습
블로그를 시작하게 된 이유
요즘 취업 준비를 하면서 포폴을 쓰다가 면접 연습도 병행하고 있었는데 생각보다 내가 모르는 것이 너무 많았다...
그래서 처음부터 복습을 해보고 싶었다. 처음부터 한다는 생각으로 내가 어떤 부분을 모르고 있었는지 짚어보고 싶었다. 그러던 와중에 후배 1명이 강의를 하나 추천해줬는데 놀라울 정도로 내가 몰랐던 것들이 쏟아져 나왔다. 그래서 정리를 해놓지 않으면 다시 까먹을 것 같아서 강의를 보면서 내가 몰랐던 부분을 위주로 정리하려고 한다.
반복문, 함수 사용법 이딴거 없다. 진짜 내가 몰랐던 것들만 정리해서 적을 예정이다. 지금도 정주행을 하고 있는데 학교나 학술 동아리로 따지면 1회차에서 나올법한 내용들에서도 모르는 것들이 우후죽순으로 나왔다. 현재 대학교 졸업을 앞두고 있는 내가 이런 상태라는 것이 매우 부끄러운 일이지만 이제라도 고치려고 한다. 혹시 이 글을 보고 잘 공감이 가지 않는 사람들을 위해 문제를 몇 개 준비했다. 만약 틀린다면 당신도 복습이 필요할 것이라고 감히 이야기하고 싶다.
아니, 이런 것까지 알아야 해? 이렇게까지 해야 돼? 라고 생각할 수 있다... 하지만 필자의 생각은 다르다. 아무리 그래도 기초에 해당하는 부분이라고 생각한다. 즉, 기초이기 때문에 알아야 한다고 생각한다. 100번 양보해서 아래와 같은 문제들이 개발을 하는 데 있어서 몰라도 문제가 없을 수도 있다. 그런데 앞으로 작성할 수많은 글 중에서 단 1개라도 개발을 하는 데 있어서 그것을 몰라서 문제가 발생할 가능성이 1이라도 존재한다면 난 이것을 공부해서 정리할 필요가 있다고 생각했다.
결정적으로 필자는 앞으로 공부할 모든 내용에 대해서 이것을 알아야 하는지 그냥 이해만 하고 넘어갔다가 좀 까먹어도 문제가 없는지 구분할 능력이 없다. 그러니까 전부 공부해야 하는거다. 그럼 여기까지 하고 문제를 내겠다.
(수정일: 2023.01.16 - 문제가 너무 억까같아서 기존 문제를 지우고 아래의 문제로 변경)
문제1. 아래의 코드를 실행하면 결과는 무엇이며 그 이유는 무엇인가?
#include <stdio.h>
typedef struct
{
short a;
int b;
} Sample;
typedef struct
{
short sh;
Sample s;
double d;
} Foo;
int main(void)
{
Foo f;
printf("%d\n", (char*)&f.sh - (char*)&f);
printf("%d\n", (char*)&f.s - (char*)&f);
printf("%d\n", (char*)&f.d - (char*)&f.s);
printf("%d\n", sizeof(f));
return 0;
}
문제2. 아래의 코드를 실행하면 결과는 무엇이며 그 이유는 무엇인가?
#include <stdio.h>
int g_num = 0;
int AddOne()
{
return ++g_num;
}
int SubstractOne()
{
return --g_num;
}
int main(void)
{
printf("%d, %d\n", AddOne(), SubstractOne());
return 0;
}
간단하게 2개의 문제를 준비했다. 예상 답변은 아래와 같다.
문제1
0
8
8
24
문제2
1, 0
하지만 만약 위처럼 대답했다면....
틀렸다!
실제로 실행을 해보면 저렇게 나오지 않는다. 설사 그렇게 나오더라도 그 이유까지 설명할 수 있어야 할 것이다.
정답 공개
문제1
https://dafher-diary.tistory.com/12
위의 링크를 보면 0, 8, 8, 24 가 아니라 0, 4, 12, 24가 나온다. 그 이유는 위의 링크에 설명을 적어놓았다.
문제2
https://dafher-diary.tistory.com/5
정답은 위의 링크에 적어놓았다. 또한 문제의 결론을 말하면 저 코드의 결과는 알 수 없다가 정답이다.
정답 공개의 내용은 전부 POCU 아카데미의 김포프님의 강의를 보고 알게 된 내용이다. 또한 이 블로그의 C언어 복습에 대한 모든 내용은 김포프님의 강의를 보고 포스팅된 것이라는 이야기를 하려고 한다. 즉, 이 블로그의 C언어 복습이라는 카테고리에 있는 모든 내용의 출처는 김포프님의 강의이다. 그럼 시작한다.
'C언어 복습' 카테고리의 다른 글
POCU C언어 정주행 6회차 - 댕글링 포인터, 포인터 연산, 캐스팅, ASLR (0) | 2022.12.10 |
---|---|
POCU C언어 정주행 4회차 - scope(범위), goto문, const (2) | 2022.12.08 |
POCU C언어 정주행 3회차 - 평가 순서, Sequence Point (0) | 2022.12.08 |
POCU C언어 정주행 2회차 - 함수 전방 선언, 빌드 과정, 라이브러리 (0) | 2022.12.08 |
POCU C언어 정주행 1회차 - 매개변수 빈칸 vs void, 주석, signed vs unsigned (0) | 2022.12.02 |