C++ 通过引用将指针传递给long
我一直在试图找到一个答案,并让这个工作了一段时间,所以我想我应该在这里检查。我试图通过引用传递指向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的
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*)的事实
wasunsigned 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,我怀疑后者也是如此。也许我们会看到。