-
[SW 정글 34일차] 알수록 신기한 C언어기타/SW 사관학교 정글 2021. 9. 5. 02:19
오늘은 목요일에 5주차 과제를 부여받고 나서 계속 공부해오던 C언어에 대해 정리해보려고 한다.
특별히 주제를 잡아서 정리하기 보다는 오늘 공부하면서 python에서는 느낄 수 없었던 C언어의 매력에 빠지게 된 요소들을 정리하려고 한다.
1. 포인터의 연산
우선, 포인터에 대한 내용을 정리한 글에서도 말했지만 포인터도 일반적인 변수처럼 type을 가지고 있다고 했다.
#include<stdio.h> int main() { int *pointer; int a = 5; pointer = &a; }
이렇게 코드를 짜면 pointer라는 int형 포인터변수에 a의 시작주소가 들어간다.
그러면 pointer + 1은 무엇일까?
보통은 int형 변수에 + 1을 하면 그 값의 + 1된다. 즉, a에 + 1을 하면 6이 된다.
하지만, 포인터 변수에 + 1을 하면 원래의 값에 + 1이 되는 것이 아니다.
pointer + 1을 하면 원래 값보다 4가 증가된 것을 볼 수 있다.
pointer변수에서의 사칙연산은 보통의 변수들과는 다르다는 것을 알 수 있다.
+ 1이라는 것은 pointer 변수의 크기만큼을 더하는 것이다.
여기서, pointer는 int형이므로 4바이트일 것이고 그래서 +1을 해주면 4바이트 이후의 주소값을 가지게 되는 것이다.
2. C에서 malloc함수는 type casting이 필수일까?
정답부터 말하면 필수는 아니라는 것이다.
C언어에서 동적메모리할당을 공부하면서 malloc함수를 이용하여 동적으로 메모리를 할당받는 코드를 볼 수 있었고 malloc의 형 변환을 위한 코드가 같이 쓰여진 것을 보았다.
만약에 형 변환을 안했으면 어떻게 될까?라는 의문점을 가져 형 변환을 뺴봤는데 그냥 잘 돌아간다.
그래서 구글링을 했고 아래의 웹 페이지를 접할 수 있었다.
https://www.quora.com/Do-I-need-to-typecast-a-malloc-returns-type
간단하게 정리하면 malloc함수가 C++에서는 암묵적으로(implicitly) 변환되지 않는 void형 포인터를 반환하지만
C에서는 암묵적으로 변환가능한 void형 포인터를 반환한다는 것이다.
어떠한 stackoverflow 답변에서는 C는 컴파일 과정에서 자동으로 형 변환을 해준다는 얘기도 존재한다.
그래서 C에서 형 변환을 써야한다 안써야한다는 정답이 없는 논쟁이다.
[오늘의 나는 어땠을까?]
어제는 정말 졸은 시간이 많았고 누군가가 오늘 뭐 공부했어?라고 물어봤을 때 공부한 내용을 말할게 없을만큼 시간을 허비해서 굉장히 기분이 안좋았고 한심하다고 느꼈다.
그래서인지 오늘은 최대한 집중하려고 했고 주어진 시간을 효율적으로 활용하려고 했다.
그 결과, 어제부터 목표로 했던 아침에 알고리즘 1문제 풀기, c언어 동적 메모리할당 개념까지 이해하기, 연결리스트 구현해보기까지 완료했다.
어제의 나는 정말 반성을 많이해야했지만 그것이 나에게 좋은 작용제가 되어 오늘의 나를 만들어주었다.
하지만, 앞으로 이렇게 시간낭비를 작용제로 만들기는 싫다.
앞으로 정글에서 얻고자 하는 것들을 얻어갈 수 있는 시간이 생각보다 얼마남지 않았다.
끝까지 달려야한다.
'기타 > SW 사관학교 정글' 카테고리의 다른 글
[SW 정글 36일차] 레드블랙트리 개념 익히기 (0) 2021.09.07 [SW 정글 35일차] 동적 메모리 할당 (링크드리스트, 이진탐색트리) (0) 2021.09.06 [SW 정글 33일차] gcc 알아보기 (0) 2021.09.04 [SW 정글 32일차] 가상화를 맛보다 (2) 2021.09.03 SW 정글 4주차 회고 (1) 2021.09.02