정체불명의 모모
강의 내용 정리(Section3_5/문자열 예제 코드 분석) 본문
강의 중 배운 내용과 추가적으로 배워야 할 부분들을 정리한 메모장 입니다.
강의 : (인프런) 게임 프로그래머 입문 올인원
◇ 포인터를 이용해서 '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'을 반환 후 보면 정상적으로 문자열이 변경된 데이터를 가진것을 확인 할 수 있습니다.
굉장히 간단한 코드인데 포인터 연산과 포인터에 대해 잘 알지 못했기에 이해하기 좀 어려웠습니다.
그렇기 때문에 더 이해하기 위해 별도로 포스팅을 한 것이고, 연습하기에 아주 좋은 예제 였다고 생각 합니다.
'프로그래밍(c++) > 인프런 강의 정리(C++)' 카테고리의 다른 글
강의 내용 정리(Section5 / 버그 유형) (0) | 2024.05.29 |
---|---|
강의 내용 정리(Section5 / 동적 할당 및 캐스팅 등) (0) | 2024.05.29 |
강의 내용 정리(Section3_8/달팽이 문제) (0) | 2024.05.17 |
강의 내용 정리(Section_3/포인터, const, 참조 등) (1) | 2024.05.17 |
강의 내용 정리(섹션2/함수 기초, 스택 메모리와 스택 프레임) (0) | 2024.05.13 |
Comments