使用指针交换int数组值

时间:2009-11-03 23:26:29

标签: c pointers swap

我应该使用指针来交换数组中的int。它编译时没有错误或警告并运行,但不会交换整数。任何建议都会有所帮助!!!

以下是测试人员:

#import <stdio.h>

void swap( int ary[] );

int main(  int argc, char*argv[] )
{
    int ary[] = { 25, 50 };
    printf( "The array values are: %i and %i \n", ary[0], ary[1] );
    swap( ary );
    printf( "After swaping the values are: %i and %i \n", ary[0], ary[1] );

    return 0;
}

这是交换功能:

void swap( int ary[] )
{
    int temp = *ary;
    *ary = *(ary + 1);
    *ary = temp;
}

这是运行后显示的内容:

The array values are: 25 and 50
After swaping the values are: 25 and 50

7 个答案:

答案 0 :(得分:17)

我讨厌破坏它,但它看起来比任何东西都错字。

在你的交换功能中:

*ary = temp;

应该是:

*(ary + 1) = temp;

编辑:你有没有使用数组表示法的原因?我觉得这样的事情要清楚一点:

int temp = ary[0];
ary[0] = ary[1];
ary[1] = temp;

答案 1 :(得分:5)

仔细检查您的交换功能:

void swap( int ary[] )
{
    int temp = *ary;
    *ary = *(ary + 1);
    *ary = temp;
}

何时*(ary + 1)被分配

答案 2 :(得分:4)

将第二个值移动到第一个点,然后将第一个值移回第一个点。

答案 3 :(得分:4)

只是为了好玩;也可以在不使用临时值的情况下进行交换

void swap( int ary[] )
{
    *ary ^= *(ary + 1);
    *(ary + 1) ^= *ary;
    *ary ^= *(ary + 1);
}

正如GMan所指出的,这段代码模糊了你对编译器和处理器的意图,因此性能可能比使用临时变量更糟,特别是在现代CPU上。

答案 4 :(得分:2)

您也可以在没有任何临时变量的情况下交换值:

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

然后致电:

swap(&ary[0], &ary[1]);

答案 5 :(得分:0)

请改为尝试:

void swap( int ary[] )
{
    int temp = ary[0];
    ary[0] = ary[1];
    ary[1] = temp;
}

答案 6 :(得分:0)

您的交换函数仅适用于2-int数组,因此请将其显示给您的编译器(它不会改变任何内容,但会使代码更清晰)

void swap( int ary[2] )