저번 시간에 포인터 변수에 대해 배웠습니다. 오늘은 구조체 포인터를 써 보도록 하겠습니다. 사실, 링크드 리스트 구현할 때 상당히 많이 쓸 거에요. 예를 들어서 p->next? 아니면 p->prev? 이런 식으로 많이 쓰실 건데요. ->가 무엇인지도 오늘 알아보도록 하겠습니다. 먼저 main 함수 안에 point형 구조체 변수가 선언이 되어 있다고 해 봅시다. 8번째 줄에 point형 지역 변수인 p를 선언했습니다. 그러면 메모리에는 위와 같이 할당이 될 겁니다. 맞나 모르겠네요. 그러면, 메모리의 어느 위치에, p를 위한 공간이 만들어 진 거에요. 역참조도 할 수 있을까요? 주솟값만 알고 있다면, 그것을 통해서 간접 참조를 할 수 있을 텐데요. 9번째 줄을 보면, t에 p의 주솟값을 넣고 있습니다. 그..
코딩 검색 결과
저번 SQL 함수 시간에 length 함수를 배웠습니다. 무엇이였는지 기억하시나요? string이 몇 바이트를 차지하는지를 돌려주는 함수였습니다. C언어의 strlen과 같이 말입니다. 그러면, character set이 UTF8이였는데, "조가희"라는 것이 있다면, 어떤 결과가 나올까요? 3이 나오는 게 아니라, 9가 나옵니다. UTF8은, 한글 1글자 당 3byte만큼 차지하기 때문입니다. C언어의 strlen과 속성이 같다고 볼 수 있는데요. 이것도 역시, byte 단위로 리턴을 합니다. 실제로 있는 글자의 수가 리턴이 되지 않음을 알 수 있어요. 만약에, "조가희멍멍" 이라는 string을 받았을 때, 글자 수가 리턴이 되었다면 5가 return 되었을 겁니다. 하지만, 5가 아닌 다른 수를 출력..
c++의 algorithm 헤더에는, 두 변수를 바꾸는 swap 메서드가 있습니다. 두 수를 바꾸는 swap 함수를, 구현해 봅시다. 저번 시간에 배운 포인터도 복습해 볼 겸 말입니다. Main 함수에 a와 b가 할당되어 있습니다. 우리는 함수를 통해서 이 둘을 바꿔보려고 합니다. 그런데, 함수로 이 둘을 깡으로 넘기기에는, 힘들어 보입니다. 왜냐하면, 정수형으로 그냥 복사해 버리면, 다음과 같이 별개의 공간에 매개 변수가 생성이 되기 때문입니다. 그러면 우리는, Main에 있는 a의 주솟값과, b의 주솟값을 넘기자는 생각을 할 수 있습니다. 이 둘의 주솟값을 각각 0x80번지, 0x84번지라고 한다면, 다음과 같이 복사하면 됩니다. 이러한 주솟값을 저장할 수 있는 변수는 포인터 변수입니다. 정수형 포인..
안녕하세요. 백준 chogahui05입니다. 'A'를 ascii로 표현한다면 1byte로 표현이 됩니다. 그런데, '가'와 같은 것들은 ascii로 표현하지 못합니다. java에서 문자 인코딩 시간에 이야기를 조금 했었습니다. utf-8 인코딩 형식에서는 3byte로 표현이 된다고. utf-16은? 2byte였어요. 실제로, mysql에서 length는 문자열의 byte 크기를 리턴해 주는데요. 예제를 보면서 이해해 보도록 하겠습니다. 먼저 table 2개를 생성하겠습니다. 각각 utf8_table과 utf16_table입니다. utf8mb4는 아래 글에서 충분히 설명을 드렸습니다. [관련글] utf8mb4는 대체 무엇일까요? 이모티콘을 넣을 수 있었던 것이 utf8mb4, 그렇지 않았던 것이 utf8이..
개인적인 생각이지만, C언어에서 포인터는 반드시 알고 가야 할 키워드 중 하나인 듯 싶습니다. ps에서 그렇게 많이 사용하지는 않았는데, 상당히 중요한 부분을 차지하고 있기도 하고, 심지어 어느 교재에서는 이것만을 중점적으로 다루는 책도 있을 정도이니 말을 다 한 셈입니다. 오늘 배울 것은 주솟값을 얻어오는 &와, 역참조를 하는 *만 배워볼 겁니다. 사실 이것만 제대로 익혀도 포인터의 50% 이상은 정복했다고 봐도 과언이 아니기 때문입니다. 예제 두 개만 봅시다. 뭔가 복잡해 보입니다? 하나 하나 천천히 봅시다. 먼저 int 형 변수 a를 선언했습니다. 그러면 메모리 상에는 다음과 같이 그려질 겁니다. 아래 그림을 보면, 0x80번지에 a가 할당되어 있음을 알 수 있는데요. 그러면, 0x80번지에 a를 ..
최근댓글