나는 스택 오버플로 게시물을 읽고, 그리고 난이 기능을 보았다사람들은 왜 char * & buf와 같은 것을 사용합니까?
advance_buf(const char*& buf, const char* removed_chars, int size);
char*& buf
여기에 무엇을 의미 하는가 사람들이 왜 그것을 사용합니까?
나는 스택 오버플로 게시물을 읽고, 그리고 난이 기능을 보았다사람들은 왜 char * & buf와 같은 것을 사용합니까?
advance_buf(const char*& buf, const char* removed_chars, int size);
char*& buf
여기에 무엇을 의미 하는가 사람들이 왜 그것을 사용합니까?
즉, buf
은 포인터에 대한 참조이므로 해당 값을 변경할 수 있습니다 (포인팅 영역의 값은 물론).
나는 C에서 오히려 부실 해요,하지만 AFAIK C에서의 참조가 없습니다이 코드는 (주 문제는 원래 c 태그 된) C++ 입니다. 당신이 buff
-NULL
을 할당 할 수 있는지 물었다 @brett 코멘트에서 그리고 만약 포인터를 통해 참조를 사용의 장점은 그래서 여기서 예를 들어
:
void advance(char*& p, int i)
{
p += i; // change p
*p = toupper(*p); // change *p
}
int main() {
char arr[] = "hello world";
char* p = arr; // p -> "hello world";
advance(p, 6);
// p is now "World"
}
편집. 더 나은 가시성을 위해 여기에 답변을 드리겠습니다.
buff
에을 할당 할 수 있습니다. 그것은 오류가 아닙니다. 누구나 말하는 것은char **pBuff
을 사용하는 경우 은NULL
(char**
유형)이거나*pBuff
(char*
유형) 일 수 있습니다.char*& rBuff
을 사용할 때rBuff
은 (char*
유형의)NULL
일 수 있지만char**
유형의 엔티티는NULL
일 수 없습니다.
buf
님의 포인터에 대한 (C++) 참조입니다. 당신은 advance_buf
을 호출하는 함수에서 const char *foo
을 가질 수 있고 포인터를 변경할 수있는 advance_buf
이 있습니다. 변경 사항은 호출 함수에서도 볼 수 있습니다.
이것은 C++에만 해당되며 C에서는 의미가 없습니다. 태그를 변경하고자 할 수 있습니다. –
C에 참조가 없으므로 태그를 "C++"로 전환했습니다. –
[book] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)는 인터넷에서 스크랩을 가져 오는 것보다 훨씬 충분한 정보를 제공합니다. – GManNickG