C언어 - 코드 분석 연습 (중급 예제)
1. C언어 코드 분석 중급 예제 1.1. 포인터의 크기와 길이 문자열 리터럴을 가리키는 문자 포인터의 동작을 이해한다. sizeof 와 strlen 이 서로 다른 기준으로 값을 계산 한다는 것을 확인한다. #include <stdio.h> #include <string.h> int main ( void ) { char * text = " 0123456789 " ; size_t result = sizeof (text) + strlen (text); printf ( "%zu\n" , result); return 0 ; } char *text 는 문자열 내용을 저장하는 배열이 아니라 문자열 리터럴의 시작 주소를 저장하는 포인터이다. sizeof(text) 는 포인터 변수 자체의 크기이며, 가리키는 문자열 길이와 다르다. strlen(text) 는 포인터가 가리키는 위치부터 '\0' 을 만나기 전까지의 문자 수를 센다. 포인터 크기는 실행 환경에 따라 달라질 수 있으며, 64비트 환경을 기준으로 설명한다. 1.2. 포인터 산술 배열 이름은 배열의 첫 번째 원소 주소를 나타내는 값처럼 동작하기 때문에 배열 이름을 포인터처럼 사용할 수 있다. 포인터에 +1을 하면 단순히 1만큼 이동하는 것이 아니라, 자료형 크기만큼 이동 하여 다음 배열 원소를 가리키게 된다. 즉, 배열 이름은 시작 주소 역할을 하며, 포인터 연산을 하면 배열의 다음 칸으로 이동하는 것과 같은 의미이다. #include <stdio.h> int main ( void ) { int nums[] = { 4 , 8 , 15 , 16 , 23 , 42 }; int *p = nums + 1 ; int result = *(p + 2 ) + p[- 1 ]; printf ( "%d...