본문 바로가기
꼬리에 꼬리를 무는 코딩

2022.09.27 꼬꼬코란 무엇인가? + C언어 Int 배열의 초기화와 메모리 할당

by 치우치지않는 2022. 9. 27.

1. 꼬꼬코의 목적: TIL 은 오늘 하루 배운 걸 몽땅 정리하다 보니, 개발 관련 til 을 모아 보기에 나빠서 새롭게 카테고라이즈해 보았다. + 매일 매일 조금씩이라도 개발 공부하는 트리거를 만들기 위해! 

2. 꼬꼬코란 무엇인가? 개발 공부를 하다보면 피상적으로 알고 지나치는 것들이 많은데, 이런 것들에 대해 잠시 멈춰 깊이 고민해 보고, 그에 대한 답을 정리하는 곳이다. 바쁘게 살다보면 지나쳐 버리는 중요한 지식들을 조금씩 짬을 내어 채워가는 노력을 기록하는 공간이다. 

3. 그래서 오늘의 꼬꼬코는 오늘 새벽까지 나를 잠 못 들게 만들었던 컴구 과제에서 생긴 질문들에 대한 자문자답 기록이다. 결국 해결을 했고, 무사히 제출 완료했다 (행복)

1. Int 배열에서, 빈 배열을 만들 수 없는 이유는 무엇일까? NULL 을 사용하면 안되는 이유?

A: 차선책으로 생각을 했던 것이, 값을 넣어주되, 빈 공간을 뜻하는 NULL 을 넣어주면 되지 않을까? 하는 생각이었다. 하지만 타입이 맞지 않는다는 에러가 나왔다. NULL 은 문자열에서만 쓸 수 있는 것 같다. 

2. Char 배열에서 빈 공간을 가진 배열을 만들 수 있을까? (공백 문자 사용등을 통해? )

공백 문자를 사용하게 되면, 사실상 빈 공간이라고는 할 수 없지만 출력될 때는 빈공간 처럼 보이는 것이다. 널문자를 활용할 수 있냐고 묻는다면, 널 문자를 사용하는순간 그 배열은 끝이 났다고 판단하기 때문에 공백을 널문자를 이용해 넣는 것은 불가능하다. 

3. 초기화된 배열의 값을 없앨 수는 없을까? 

A: 없앨 수 없다고 생각한다. 메모리 동적 할당과 일반 배열의 차이가 보이는 부분이기도 한데, 이미 배열의 길이가 상수로 선언되어 컴파일러에 선언되었기 때문에 값을 아예 없앨 수는 없을 것 같다. 마찬가지 이유로, 배열의 첫 주소를 이용한 메모리 접근으로 널 포인터를 만들려고 했던 시도도 실현이 불가능하다.   

4. 오늘의 결론: int 배열에서는, 동적 메모리 할당을 사용하지 않는 , 이미 크기가 선언된 배열에 대해서 공간을 직접 없앨 수가 없다. 따라서 원하지 않는 값이 있다면, 그것을 출력에서 제외하거나, 다른 새로운 배열을 만들고, 배열에 if(element != 0) 이면 값을 복사하는 방식으로만 0 없앨 수가 있다. (구글링을 한참 해도 답이 안나오는데는 이유가 있다. 불가능한 일이라고 판단되면, 빠르게 포기하고 다른 방법을 모색하는 현명한 태도를 지닐 필요가 있다고 느꼈다.)

 

-> 지하철에서 잠깐 생각해 보는 것만으로도 생각 정리에 굉장히 큰 도움이 되었다. 늘 바쁘다는 핑계로 이런 깊은 고민을 피하고만 있었던 건 아닌지? 따끔하게 반성하고 성장할 점을 찾아낸 뜻 깊은 하루였다. 

댓글