C++ - 前进作为参数传递的指针

C++ - Advancing a pointer passed as an argument

本文关键字:参数传递 指针 C++      更新时间:2023-10-16

我在推进作为参数传入的指针时遇到问题。这些想法是该函数将读取指针处的值并推进指针。我需要通过引用传入吗?甚至可以通过引用传递指针吗?

int32 File::readDWORD(char* offset)
{
    int32 value;
    memcpy(&value, offset, sizeof(int32));
    offset += sizeof(int32);
    return value;
}

该函数读取值并推进本地指针,但我希望它推进传入的指针。

可以通过引用传递指针,也可以将指针传递到指针(句柄)。这两种解决方案都允许您修改指针的值,以便修改它指向的位置。

但请注意,通常不应在C++中使用"原始"指针。您提供的内存操作可以替换为更高级的语言结构;我能想到的是更好地封装您的 File 类,其方式可能类似于流。

这可能会导致另一个问题 - 你为什么不只使用std::fstream

int32 WLD::readDWORD(const char*&offset)
{
    int32 value;
    memcpy(&value, offset, sizeof(int32));
    offset += sizeof(int32);
    return value;
}
char*pter = initial;
WLD::readDWORD(pter);
assert(pter == initial+sizeof(int32));

这里offset是对const char*的引用。因此,虽然您可以更改指针,但无法更改它指向的内容。在这种情况下,这正是您想要的。

您不应该通过"请求更改行为以通过引用传递"(通过编译器选项)来更改行为。这使得你的代码不可移植,非标准和非人类可读性(除了那些知道的人......

是的,是的。除非您专门请求按引用传递,否则所有参数(包括指针)都是按值传递的,这意味着更改参数的值不会更改可能已用作函数参数的任何变量的状态。

你必须通过引用传递它

int32 File::readDWORD(char* & offset)
{
     [...]
     offset += sizeof(uint32);
     [...]
}
相关文章: