通过引用将指针传递给long

时间:2013-01-29 05:54:37

标签: c++ pointers reference declaration

我一直试图找到一个答案并让它工作一段时间,所以我想我会在这里查看。我试图通过引用将指针传递给long。我正在使用的语法是:

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

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

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

在相关的说明中,如果我有一个unsigned long *我接受它,那么就没有办法强制转换它 可以将它传递给Hex2Loong函数吗?我将不得不创建临时long * vars投入他们并通过那些?

Ty任何答案,     DRF

编辑: 嗯,好的,回答一些评论。 我传递了一个引用,因为该函数转换了一个可能非常长的十六进制字符串 一长串。 (即想一个大约2 ^ 1000的数字写成十六进制字符串) 我需要将数字作为一个longs数组传回(我可能会重写它 因为没有铸造使得它很麻烦,所以无符号长。)

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

最后你是对的,错误与宣言无关但是 而是用法。事实上我试图将(long *) num1传递给num1 是unsigned long *弄乱了一切。我仍然不明白错误显示的原因 在头文件中,而不仅仅是我实际调用的地方 具有错误参数的函数。

Edit2:哦,我刚刚意识到你通过const std::string&的意思。而且当然 你是完全正确的。我也会改变它。这是我用java编写的 太多了。我没有意识到字符串实际上会被复制。

1 个答案:

答案 0 :(得分:2)

你应该可以通过以下方式调用该函数:

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行时会抱怨。


就你的第二个问题而言,不,你需要一个可以作为参考传递的实际变量,因为函数可能会尝试改变它。因此,您需要在某处制作临时副本。

但是,请记住,除非您确实需要更改您传入的变量的值(以便这样的更改反映在调用代码中),否则不需要传递参考。您可以按值传递它并使用函数中的值。

如果您这样做(即,如果您不需要更改它),则可以在函数调用中使用&lvar(long*)(unsigned_long_ptr_variable)等临时值。