请高人指点:指针数组使用函数未排序 ...
/*********************************************//* 指针数组排序 */
/*********************************************/
#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 , a ) > 0 )
{
p =a;
a =a; //
a = p;
printf("swap %s,%s\n", a , a);
//swap( a , a ); 使用函数交换未改变地址
}
}
}
}
//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));
}
} 使用函数 swap(char *x, char *y ) 并未实现交换地址 交换地址是很危险的操作,一般都是交换存放的值,而不是改变指针指向的地址 本帖最后由 Croper 于 2019-1-14 11:28 编辑
这是因为c语言里形参的传递默认是【复制】了一份原来的变量
比如在你的函数里面void swap(char *x, char *y ) ,x和y只是在传递中复制了一份a[ i]和a,整个函数只是在操作这两个复制,并没有改变原变量;
如果在想要在函数里改变原来的值,需要传递该变量的地址,而不是该变量本身。
void swap(char **x, char **y )
{
char *p;
p = *x;
*x = *y;
*y = p;
printf("swap %s,%s\n", *x ,*y );
}
...
swap( &a , &a );
...
页:
[1]