2024. 10. 7. 12:14ㆍC/에 대하여
c, 내 삶의 빛, 내 생명의 타오르는 불꽃, 나의 죄, 나의 영혼. c-언-어.
세 번 입천장에서 이빨을 톡톡 치며 세 단계의 여행을 하는 혀 끝. c. 언. 어.
이 글은 c에 대해 학습하기 위한 글이 아님을 미리 명시한다.
내가 이해에 난항을 겪었던 개념들에 대해 휘갈기는 글이다.
좋은 하루!
이번엔 c에 대해 갈겨보고자 한다.
오히려 c는 다른 것들에 대해 기술할 때 보다 더 명확하고 간결하리라는 생각이 든다.
아마 착각일테지.
이번엔 java와 비교한 차이점과 pointer에 대해 기술하고자 한다.
나는 이전에 42에서 pisicin과정을 거친 적이 있다.(예상하다시피 cadet이 되는데는 실패했다.) 나는 그곳에서 shell을 다루는 방법과 c를 classical하게 다루는 법에 대해 깨닫게되었다. 아마 내 기억에 structure를 다루는 문제까지 갔던 것 같다.
아무튼, 이제 다른 언어와의 차이점에 대해서 알아보야만 할 것이다.
java와 비교해보자.
Data type
C라고 자료형이 특별하거나 하진 않다. 엄밀히 말하자면 다른 언어들의 자료형이 특별한거지. 간단하게 java와 비교해보겠다.
char type에 대해 다시 생각해보자.
java의 char는 문자 하나를 담을 수 있는 2bytes의 type이다.
c에서의 char는 1byte의 크기를 가진다.
역시 c야! 같은 자료형인데 가볍다니! 라고 생각하면 안될 것이다.
java의 char는 unicode이다.
반면 c의 char는 ascii code이다.
그냥 인식만 해두자.
String?
java에서 문자열을 써보자.
String s = "meow";
c에서도 해볼까?
char str[] = {'m', 'e', 'o', 'w'};
c에는 문자열 자료형이 없다.
char의 나열이다.
structure
java에는 없는 자료형이다.
하지만 java에서의 class와 비숫한 개념으로 생각해도 좋다.
structure citizen
{
char name[10];
int birth_m_d_y[3];
char gender;
char address[100];
boolean are_they_voted;
}
시민에 대한 구조체이다.
class처럼 field를 가진다.
차이점이 있다면 class는 행위, 즉 method를 가질 수 있지만 structure의 경우에는 function을 가지지 못한다.
class citizen에서는 vote();라는 method를 가질 수 있지만, structure citizen은 투표여부의 정보만 가질 수 있다. 괴상한 비유다.
pointer
patris, filii, spiritus.
우리 모두가 사랑해마지않는 pointer다.
pointer란 무엇일까? 왜 다른 언어에서는 이런걸 본 적 없지?
pointer는 할당된 변수의 주소값을 가지고 있는 변수이다. 아니? value를 참조한다? both of them.
int i = 42;
int *p = &i;
printf("%n, &i);
printf("%n", *p);
당신을 담당하는 직원이라고 생각해도 나름 재미있는 비유일 것이다.
그(*p)는 당신을 담당한다. 당신(i)이 몇 번(address)에 앉아있는지, 무엇(value)을 주문했는지 알고있다.
manager가 그에게 ‘너 뭐야?’라고 물어보면, ’저는 1번에 앉아있는 i씨를 담당하고 있습니다. 그는 42를 주문했습니다.‘ 라고 말 할 수 있을 것이다.
아무튼, 주소와 값을 담은 변수이다!
그래서 왜 쓰는데?
우리가 타 언어에서는 주소를 따로 신경 쓸 필요가 없었다. 그리고 memory에 대해서도 신경 쓸 필요 없었다. 이것은 분명히 긴 이야기가 될 것이다.
간단하게 적는다면, 상기한 structure에서도 사용되고, array에서도 사용되고, malloc을 통한 dynamic memory allocation에서도 사용되고... 떠올리려고 하니까 막상 안떠오른다. 우리가 java에서 간단하게 쓰는 것들은 java에서 이 pointer들을 알아서 관리해주는 것이다.
이후에 다시 c에서 memory를 다루는 내용에 대해 따로 작성해야할 것 같다.
우선 지금은 pointer가 무엇인지만 인지해두자. 이후 memory를 다루는 것에 대해 기술하면서 우리는 인식의 단계로 넘어갈 수 있을 것이다.
이어서-