[英]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;
}
該函數讀取值並前進本地指針,但是我希望它前進傳入的指針。
您可以按引用傳遞指針,也可以將指針傳遞給指針(句柄)。 兩種解決方案都允許您修改指針的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);
[...]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.