C++ - 前进作为参数传递的指针
C++ - Advancing a pointer passed as an argument
我在推进作为参数传入的指针时遇到问题。这些想法是该函数将读取指针处的值并推进指针。我需要通过引用传入吗?甚至可以通过引用传递指针吗?
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);
[...]
}
相关文章:
- 使用指向成员的指针将成员函数作为参数传递
- 修改函数中的指针(将另一个指针作为参数传递)
- 将成员函数指针作为参数传递给模板方法
- 使用引用与指针将数组作为参数传递
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 将函数指针数组中的函数指针作为模板参数传递
- 无法将指向类的成员函数的函数指针作为参数传递给同一类的另一个成员函数
- 如何将指针变量作为引用参数传递?
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- Qt5 - 如何将"QList<T> *"指针作为信号参数传递,并在完成后将其删除?
- C++将指向成员的指针作为模板参数传递
- 通过引用函数传递指针参数是什么意思?
- C++ 将派生类的成员函数指针作为参数传递时选择了错误的模板专用化
- 将函数指针作为函数参数传递的目的
- 将派生类作为参数传递给方法,该方法是具有智能指针的基类
- 使用 C++11 将指向成员函数的指针作为参数传递
- 如何在程序集函数中将元素数组作为参数传递时转发 ARM 寄存器的地址指针
- 在一行中将默认类型值上的指针作为参数传递
- 将双指针作为参数传递给需要引用 std::vector <double>的函数