将函数/方法参数定义为指针,并在不引用的情况下进行传递

时间:2018-08-19 13:35:36

标签: c++ pointers reference

我有一个关于指针/引用的问题,我找不到很多有关的信息,因此,有了此方法声明(C ++):

void RequestParser::parseRequest(const char * request) 

当我想使用此方法时,可以这样称呼它:

requestParser.parseRequest(buffer);

因此,回到定义中,该参数需要一个指针(const char * request),为什么我可以这样通过没有引用的缓冲区:

requestParser.parseRequest(&buffer);

这应该是正确的方法,对吗?也许幕后正在发生一些魔术,像这样:

void RequestParser::parseRequest(const char request[])

我知道您不能将数组作为值(至少是char数组)传递,因此这仅是语法糖:

void RequestParser::parseRequest(const char * request) 

我误会什么?

1 个答案:

答案 0 :(得分:3)

当您将buffer之类的数组传递给parseRequest时,就会出现array-to-pointer decay

  

从数组类型的左值和右值到指针类型的右值存在隐式转换:它构造了一个指向数组第一个元素的指针。每当数组出现在不需要数组但指针为以下内容的上下文中时,都会使用此转换:

因此,实际上您是将指针传递给数组的第一个元素,它的类型为char *(并且可以转换为const char*)。

另一方面,您不能传递&buffer,它获取数组的地址并返回指向数组的指针(即char (*)[2048]),它与参数不匹配输入const char*