人们为什么要使用像char *& buf这样的东西?

时间:2010-08-08 20:37:19

标签: c++

我正在阅读有关Stack Overflow的帖子,我看到了这个功能:

    advance_buf( const char*& buf, const char* removed_chars, int size );

此处char*& buf的含义以及人们为何使用它?

2 个答案:

答案 0 :(得分:13)

这意味着buf是对指针的引用,因此可以更改其值(以及它指向的区域的值)。

我在C中相当陈旧,但是AFAIK在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指针,这些更改也会在调用函数中看到。