C++ 通过引用将指针传递给long

C++ 通过引用将指针传递给long,c++,pointers,reference,declaration,C++,Pointers,Reference,Declaration,我一直在试图找到一个答案,并让这个工作了一段时间,所以我想我应该在这里检查。我试图通过引用传递指向long的指针。我使用的语法是: int Hex2Loong(long*& bytebuff, int& len, const std::string Hexbuff); 每当我试图声明函数时,就会出现错误。这个定义本身令人惊讶 似乎没有问题。我在我的Hex2Intfcn中使用了与int*&相同的语法 那里没有问题。知道我搞砸了什么吗 我得到的错误是: 错误:传递HEX2LONG的

我一直在试图找到一个答案,并让这个工作了一段时间,所以我想我应该在这里检查。我试图通过引用传递指向long的指针。我使用的语法是:

int Hex2Loong(long*& bytebuff, int& len, const std::string Hexbuff);
每当我试图声明函数时,就会出现错误。这个定义本身令人惊讶 似乎没有问题。我在我的
Hex2Int
fcn中使用了与
int*&
相同的语法 那里没有问题。知道我搞砸了什么吗

我得到的错误是: 错误:传递HEX2LONG的参数1(长int*&,int&,常量std::string)

在一个相关的注释中,如果我有一个
无符号长*
我认为没有办法转换它,所以我 可以将其传递到
Hex2Loong
功能中,对吗?我必须创建临时
long*
Var投进他们然后通过那些

对于任何答案, Drf

编辑: 嗯,好吧,来回答一些评论。 我传递了一个引用,因为该函数转换可能非常长的十六进制字符串 到一个长数组。(即,将一个2^1000左右的数字写成十六进制字符串) 我需要把这个数字作为一个长数组传递回去(我可能会为它重写) 未签名的long(因为不施法使它变得麻烦)

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

最后你是对的错误与声明无关 与其说是习惯,不如说是习惯。我试图传递num1的
(long*)的事实
was
unsigned 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
行时会出现问题


关于第二个问题,不,您需要一个可以作为引用传递的实际变量,因为函数可能会试图更改它。所以你需要在某个地方做一份临时拷贝

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


如果您这样做(即,如果您不需要更改它),那么您可以在函数调用中使用诸如
&lvar
(long*)(unsigned_long_ptr_变量)
之类的临时变量。

您能告诉我们在哪里调用它吗?您能包括函数的调用方式吗?根据您的错误,声明是正确的,但用法是不正确的1)为什么要通过值而不是引用传递
Hexbuff
?2) 如果您使用STL(至少是std::string),那么最好填充
std::vector
(也通过ref.传递它)您正在为调用传递一个对
long*
的有效引用,对吗?从我所看到的来看,这个decl中唯一“不寻常”的东西是任何
Hexbuff
的恒定拷贝。不确定是否打算使用<代码> const STD::String和< /COD>?AFAIK四流行的编译器(MSVC、ICC、GCC、CLang)在流行的平台(PC和MAC)上考虑<代码>长< /C> >长度与<代码> int >代码> 4字节。如果您想要8字节整数类型,应该使用
long-long
int64\t
+1,我怀疑后者也是如此。也许我们会看到。