我应该使用指针来交换数组中的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
答案 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] )