|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
/*********************************************/
/* 指针数组排序 */
/*********************************************/
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<string.h>
int main()
{
#if( 0 )
可以注释.....
#endif
char * a[] = {"Japan", "China","USA","Canada","Russia"};
void sort(char *a[], int n);
void print(char *a[], int n);
void swap(char *,char *);
sort(a, 5);
print(a, 5);
return 0;
}
void sort(char *a[], int n)
{
int i, j, k;
char *p;
k = n - 1;
for( j = 0; j < k-1; j++ )
{
for( i = 0; i < k - j; i++ )
{
if( strcmp( a[i] , a[i + 1] ) > 0 )
{
p = a[i];
a[i] = a[i + 1]; //
a[i + 1] = p;
printf("swap %s,%s\n", a[i] , a[i + 1]);
//swap( a[i] , a[i + 1] ); 使用函数交换未改变地址
}
}
}
}
//void swap(char *x, char *y )
//{
// char *p;
//
// p = x;
// x = y;
// y = p;
// printf("swap %s,%s\n", x ,y );
//}
void print(char *a[], int n)
{
int i;
for( i = 0; i < n; i++ )
{
printf("%s\n", *(a + i));
}
}
本帖最后由 Croper 于 2019-1-14 11:28 编辑
这是因为c语言里形参的传递默认是【复制】了一份原来的变量
比如在你的函数里面 void swap(char *x, char *y )
,x和y只是在传递中复制了一份a[ i]和a[i+1],整个函数只是在操作这两个复制,并没有改变原变量;
如果在想要在函数里改变原来的值,需要传递该变量的地址,而不是该变量本身。 void swap(char **x, char **y )
{
char *p;
p = *x;
*x = *y;
*y = p;
printf("swap %s,%s\n", *x ,*y );
}
...
swap( &a[i] , &a[i + 1] );
...
|
|