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

时间:2012-09-25 10:55:38

标签: c++ function

我无法推进作为参数传入的指针。想法是该函数将读取指针处的值并推进指针。我是否需要通过引用传递它?是否可以通过引用传递指针?

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

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

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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*的引用。因此,虽然您可以更改指针,但您无法更改指向的内容。在这种情况下,这正是您想要的。

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

您必须通过引用传递

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