gpt4 book ai didi

c++ - 通过引用传递一个指向 long 的指针

转载 作者:行者123 更新时间:2023-11-30 04:21:18 24 4
gpt4 key购买 nike

一段时间以来,我一直在努力寻找答案并让它发挥作用,所以我想我会在这里查看。我正在尝试通过引用传递一个指向 long 的指针。我使用的语法是:

int Hex2Loong(long*& bytebuff, int& len, const std::string Hexbuff);

每当我尝试声明函数时,错误就会出现。定义本身令人惊讶似乎没有问题。我在我的 Hex2Int fcn 中使用与 int*& 完全相同的语法那里没有问题。知道我搞砸了什么吗?

我得到的错误是: 错误:传递参数 1 的 Hex2Loong(long int*&,int &,const std::string);

相关说明,如果我有一个 unsigned long * 我认为没有办法转换它,所以我可以将它传递给 Hex2Loong 函数吗?我将不得不创建临时 long *vars 投入其中并传递给他们?

Ty 任何答案, 研究

编辑:嗯,好的,所以要回答一些评论。我传递了一个引用,因为该函数转换了一个可能很长的十六进制字符串到多头数组。 (即,将 2^1000 左右的数字写成十六进制字符串)我需要将数字作为一个 long 数组传回(我可能会重写它unsigned long,因为没有强制转换会很麻烦)。

HexString 被声明为 const,因为它应该是(它不应该只被读取修改)。

最后你是对的错误与声明无关但是而不是使用。事实上,我试图通过 (long *) num1 where num1unsigned long * 把一切都搞砸了。我仍然不明白为什么会显示错误在头文件中,而不仅仅是我实际调用的地方参数错误的函数。

Edit2:哦,我刚刚意识到传递 const std::string& 是什么意思。而且当然你是对的。我也会改变它。这就是我用 Java 编写的结果太多了。我没有意识到字符串实际上会被复制。

最佳答案

你应该能够用类似的东西调用那个函数:

long lvar;
long *plvar = &lvar;
int rc = Hex2Loong (plvar, some_int, some_string);

不能做的是传递 long 的地址,因为您需要一个真实的引用。换句话说,不要尝试:

long lvar;
int rc = Hex2Loong (&lvar, some_int, some_string);

参见下面的示例代码:

void Fn (long * &p1) {}

int main (void) {
long lvar;
long *plvar = &lvar;
Fn (plvar);
//Fn (&lvar);
return 0;
}

这可以编译,但是当你取消注释 &lvar 行时会报错。


就您的第二个问题而言,不,您需要一个可以作为引用传递的实际变量,仅仅是因为该函数可能会尝试更改它。所以你需要在某个地方制作一个临时拷贝。

但是,请记住,除非您确实需要更改您传入的变量的值(以便此类更改反射(reflect)在调用代码中),否则没有必要传递引用。您可以按值传递它并在函数内使用该值。

如果你这样做(即,如果你不需要改变它),你可以使用像 &lvar(long*)(unsigned_long_ptr_variable) 这样的临时变量在函数调用中。

关于c++ - 通过引用传递一个指向 long 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14576519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com