포인터는 단순히 값을 보유하는 변수이며 그 값은 메모리 주소입니다.
포인터에 대한 포인터는 단순히 값을 보유하는 변수이기도합니다. 이 값은 포인터의 메모리 주소입니다.
값 포인터를 변경하려는 경우 포인터에 대한 포인터를 사용합니다.
//Not a very useful example, but shows what I mean...
void getOffsetBy3Pointer(const char *pInput, char **pOutput)
{
*pOutput = pInput + 3;
}
는 그리고 당신은이 기능과 같이 전화 :
const char *p = "hi you";
char *pYou;
getOffsetBy3Pointer(p, &pYou);
assert(!stricmp(pYou, "you"));
이제 우리는 하나의 포인터로이 기능을 구현하기 위해 노력하면 무슨 일이 일어날 지 고려한다.
//Note: This is completely wrong
void BadGetOffsetBy3Pointer(const char *pInput, char *pOutput)
{
//*pOutput refers to the first actual char element that pOutput points to.
pOutput = pInput + 3;
//pOutput now points to pInput + 3, but the variable we passed in remains distinct.
}
그리고이 기능과 같이 호출 다음 BadGetOffsetBy3Pointer에
const char *p = "hi you";
char *pYou = NULL;
BadGetOffsetBy3Pointer(p, pYou);
assert(pYou == NULL);
주, 우리는 문자의 일부를 변경 할 수 있지만 우리는에 포인트를 pYou 무엇을 변경할 수 있습니다.
C는 아무튼 새로운 k가있다. eyword. C++ 않습니다. 즉, C++은 메모리 할당 실패에 대한 예외를 던지므로 null을 확인할 필요가 없습니다. – GManNickG
또한 포인터 대신 참조를 사용하여 컴파일러에서 더러운 작업을 수행 할 수 있습니다. – GManNickG