我应该使用指针交换整数在阵列中。它编译没有错误或警告并运行,但不会掉的整数。任何建议将是有益的!

下面是测试器:

#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
有帮助吗?

解决方案

我不喜欢破坏这一点,但它看起来像一个错字比什么都重要。

在您的交换功能:

*ary = temp;

应该是:

*(ary + 1) = temp;

编辑:有没有你不使用数组表示法的原因?我认为这是一个有点清晰了这样的事情:

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

其他提示

更仔细地检查你的交换功能:

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

在做*(ary + 1)得到分配的的?

您移动第二值到第一点,然后移动至第一值返回到第一位置。

玩票;它也可以交换,而不使用一个临时值

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

正如GMAN指出,这代码掩盖从编译器和处理器的意图,所以性能可能比使用临时变量,特别是在现代CPU会更糟。

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

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

然后调用:

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

尝试这个代替:

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

您的交换功能将只工作2 - 整型数组,所以它给你的编译器(它不会改变任何东西,而是使代码更清洁)

void swap( int ary[2] )
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top