题
我应该使用指针交换整数在阵列中。它编译没有错误或警告并运行,但不会掉的整数。任何建议将是有益的!
下面是测试器:
#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] )
不隶属于 StackOverflow