我道歉,因为这很简单,我正在使用我自己的XOR交换方法,并希望它比较参考和指针使用之间的速度差异(不要破坏它!)
我的XOR ptr功能如下:
void xorSwapPtr (int *x, int *y) {
if (x != y && x && y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
}
我将它复制到xorSwapRef函数,该函数只使用refs(int& x等)anywho:
我像这样使用它,但我收到错误error: invalid conversion from ‘int’ to ‘int*’
int i,x,y = 0;
for(i=0;i<=200000;i++) {
x = rand();
y = rand();
xorSwapPtr(x, y); //error here of course
}
我如何使用带有整数的指针函数,比如ref?我只是想知道,因为我在书中找到的示例xor函数使用指针,因此我想测试。
答案 0 :(得分:11)
x
和y
是int
s; xorSwapPtr
需要两个int*
,因此您需要传递x
和y
的地址,而不是x
和y
的地址:
xorSwapPtr(&x, &y);
答案 1 :(得分:3)
语法可能令人困惑......
如果要将指针传递给某个东西,通常会使用它的地址,例如&something
。但是,在声明函数签名时,如果要将其中一个参数定义为对名为somethingElse的Type的引用,则可以使用Type &somethingElse
。这两个都使用&amp;令牌,但它们意味着2个不同的东西(令牌和放大器的不同语义,就像*可能意味着相乘,定义指针或取消引用指针,每个取决于它在代码中的语法位置)。
void foo(int *x, int *y); // declare a function that takes two pointers to int
void bar(int &x, int &y); // declare a function that takes two references to int
现在让我们使用它们......
int i, j;
foo(&i, &j); // pass in the address of i and the address of j
bar(i, j); // pass in a reference to i and a reference to j
// can't tell by the call that it is a reference - could be "by value"
// so you gotta look at the function signature
答案 2 :(得分:2)
这一位
xorSwapPtr(x, y);
需要
xorSwapPtr(&x, &y);
希望这有帮助