二重指针应用

 1 //利用二重指针实现改变指针数组和数组元素之间的mapping,并没有改变原数组
 2 
 3 #include<stdio.h>
 4 int a[5];
 5 int *name[]={&a[0],&a[1],&a[2],&a[3],&a[4]};
 6 int **p;
 7 int main()
 8 {
 9     p=name;
10     void sort(int **,int);
11     void print(int**,int);
12     for(int i=0;i<sizeof(a)/sizeof(int);i++)
13         scanf("%d",*(p+i));
14     print(p,5);
15     sort(p,5);
16     print(p,5);
17     for(i=0;i<5;i++) printf("%5d",a[i]);
18     return 0;
19 }
20 
21 void sort(int **a,int n)   //没有直接对数组进行排序,而是改变了指针数组和数组之间的mapping
22 {
23     for(int i=0;i<n-1;i++)
24     {
25         int min=i;
26         for(int j=i+1;j<n;j++)
27         {
28             if(**(a+min)>**(a+j))
29             {
30                 min=j;
31             }
32         }
33         if(min!=i)
34         {
35             int *temp=*(a+i);
36             *(a+i)=*(a+min);
37             *(a+min)=temp;
38         }
39     }
40 }
41 
42 void print(int **a,int n)
43 {
44     for(int i=0;i<n;i++)
45         printf("%5d",**(a+i));
46     printf("\n");
47 }

运行结果:

 

posted @ 2020-03-14 19:16  kakusan  阅读(204)  评论(0编辑  收藏  举报