James_p 发表于 2019-1-14 09:23:48

请高人指点:指针数组使用函数未排序 ...

/*********************************************/
/* 指针数组排序                                                */
/*********************************************/
#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));
        }
}

James_p 发表于 2019-1-14 09:26:29

使用函数 swap(char *x, char *y )   并未实现交换地址

BngThea 发表于 2019-1-14 09:33:10

交换地址是很危险的操作,一般都是交换存放的值,而不是改变指针指向的地址

Croper 发表于 2019-1-14 11:26:46

本帖最后由 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]
查看完整版本: 请高人指点:指针数组使用函数未排序 ...