我正在阅读有关Stack Overflow的帖子,我看到了这个功能:
advance_buf( const char*& buf, const char* removed_chars, int size );
此处char*& buf
的含义以及人们为何使用它?
答案 0 :(得分:13)
这意味着buf
是对指针的引用,因此可以更改其值(以及它指向的区域的值)。
我在C中相当陈旧,但是AFAIK在C中没有引用,而且这段代码是C ++ (注意问题最初被标记为c)。
例如:
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"
}
编辑:在@brett评论中询问您是否可以将NULL
分配给buff
,如果是,那么在指针上使用引用的优势在哪里。我在这里提出答案以提高可见度
您可以将
NULL
分配给buff
。这不是错误。大家都在说的是,如果您使用char **pBuff
,那么pBuff
可能是NULL
(类型为char**
)或*pBuff
可能是NULL
(类型char*
)。使用char*& rBuff
时,rBuff
仍然可以NULL
(类型为char*
),但没有类型char**
的实体可以是NULL
}。
答案 1 :(得分:4)
buf
是对指针的(C ++)引用。您可以在调用const char *foo
的函数中使用advance_buf
,现在advance_buf
可以更改foo
指针,这些更改也会在调用函数中看到。