使用指针交换值

时间:2010-05-14 02:26:39

标签: c++

我有这段代码片段

int i = 5;
int k = 7;
int * iPtr;
int * jPtr;
int * kPtr;

iPtr = &i;
kPtr = &k;

我需要使用指针交换i和k。这就是我的做法:

*jPtr = *kPtr ;
*kPtr = *iPtr ;
*iPtr = *jPtr ;

这是最好的方法,还是有更好的方法?

4 个答案:

答案 0 :(得分:11)

在我看来,最好在C ++中做到这一点的方法是使用std::iter_swap()

#include<algorithm>

// ...
int *iPtr = &i, *kPtr = &k;
std::iter_swap(iPtr, kPtr);

你可能认为这是一种矫枉过正,但如果你包括<algorithm>,我会不同意。当然,在作业的情况下,如果教师的意图是让您熟悉STL,这个答案就成立了。如果目的是向您介绍指针,那么最好的解决方案是引入一个临时变量j

int j;
int *iPtr = &i, *kPtr = &k, *jPtr = &j;
*jPtr = *kPtr;
*kPtr = *iPtr;
*iPtr = *jPtr;

答案 1 :(得分:6)

只是为了好玩,这样做会没有第三个变量......

*iPtr ^= *kPtr;
*kPtr ^= *iPtr;
*iPtr ^= *kPtr;

这是一个旧的汇编语言技巧:XOR swap algorithm

答案 2 :(得分:4)

您只是忘了为临时变量分配空间:

int i = 5; 
int k = 7; 
int * iPtr; 
int * jPtr = new int;
int * kPtr; 

iPtr = &i; 
kPtr = &k; 
...
*jPtr = *kPtr ; 
*kPtr = *iPtr ; 
*iPtr = *jPtr ; 

delete jPtr;

答案 3 :(得分:1)

您的老师告诉您使用指针的原因是您熟悉将变量的地址(指针)传递给函数。所以你可以做这样的事情:

void add_bonus_points(int *x)
{
    *x = *x + 100;
}

void main()
{
    int a = 2;

    printf("%d", a); // 2

    add_bonus_points(&a);
    printf("%d", a); // 102

}

关于swap,这是代码:

void swap(int *x, int *y)
{
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
}

void main()
{
    int a = 5;
    int b = 7;

    swap(&a, &b);
    printf("%d %d", a, b);
}