정체불명의 모모

강의 내용 정리(Section3_5/문자열 예제 코드 분석) 본문

프로그래밍(c++)/인프런 강의 정리(C++)

강의 내용 정리(Section3_5/문자열 예제 코드 분석)

정체불명의 모모 2024. 5. 17. 13:19

강의 중 배운 내용과 추가적으로 배워야 할 부분들을 정리한 메모장 입니다.

강의 : (인프런) 게임 프로그래머 입문 올인원 


포인터를 이용해서 'C'언어의 함수인 strCpy( ) 함수를 구현해 보는 예제

  (파악하는데 시간이 좀 걸려 따로 글을 정리해서 올립니다.)

 

- strCpy 함수는 문자열 복사 하는 함수 입니다.

// 아래 코드는 좀 생각 할 필요가 있습니다.
char* StrCpy(char* dest, char* src)
{
	// 원본 위치
	char* ret = dest;

	{
		// index 이용하는 버전
	//{
	//	char* ret = dest;

	//	int i = 0;

	//	while (src[i] != 0)
	//	{
	//		dest[i] = src[i];
	//		i++;
	//	}
	//	dest[i] = 0;
	//}  

	}
	
	// pointer를 이용하는 버전
	{
		cout << "*src : " << *src << endl;

		// 포인터는 주소의 시작 위치를 가르키고있다.
		while (*src != 0)
		{
			*dest = *src;
			dest++;
			src++;
		}

		// 마지막칸에 0을 넣어 문자열의 종료 지점을 알려준다.
		*dest = 0;
	}

	return ret;
}

 

char형 배열을 포인터를 이용하여 index  접근으로 문제를 해결 했었는데, 

포인터 연산을 통한 버전은 이해가 좀 어려웠습니다.

 

// 포인터는 주소의 시작 위치를 가르키고있다.
while (*src != 0)
{
	*dest = *src;
	dest++;
	src++;
}

// 마지막칸에 0을 넣어 문자열의 종료 지점을 알려준다.
*dest = 0;

 

위 코드를 번역해 보자면, dest와 src의 변수를 포인터 연산을 통해 포인터 시작의 위치 값을 변경해 주면서

해당 위치의 주소의 값을 src 데이터 값으로 변경해 주고 있습니다.

 그리고 while문이 끝나고 *dest에 '0'의 값을 넣어 문자열의 마지막이라고 알려줍니다.

 

*dest = 0; 일때 dest의 값을 확인하면 아무것도 없는것을 알 수 있는데, 그 이유는 포인터의 주소값이 뒤로 밀리면서

데이터들이 보이지 않는 것 입니다.

 

그래서 기존 주소를 담아 놓았던 'char * ret'을 반환 후 보면 정상적으로 문자열이 변경된 데이터를 가진것을 확인 할 수 있습니다.


굉장히 간단한 코드인데 포인터 연산과 포인터에 대해 잘 알지 못했기에 이해하기 좀 어려웠습니다.

그렇기 때문에 더 이해하기 위해 별도로 포스팅을 한 것이고, 연습하기에 아주 좋은 예제 였다고 생각 합니다.

Comments