C ++:无法使用简单的指针?

时间:2010-08-21 20:57:31

标签: c++ pointers function

我道歉,因为这很简单,我正在使用我自己的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函数使用指针,因此我想测试。

3 个答案:

答案 0 :(得分:11)

xyint s; xorSwapPtr需要两个int*,因此您需要传递xy的地址,而不是xy的地址:

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);

希望这有帮助