使用指针交换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] )