使用指针交换int数组值

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

这是测试人员:

#import  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; } 

这是交换function:

 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 

我讨厌破坏这个,但它看起来像拼写错误。

在你的交换function中:

 *ary = temp; 

应该:

 *(ary + 1) = temp; 

编辑:你有没有使用数组表示法的原因? 我认为对于这样的事情来说有点清楚:

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

仔细检查您的交换function:

 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-int数组,所以把它显示给你的编译器(它不会改变任何东西,但是使代码更清晰)

 void swap( int ary[2] )