指针的应用

一、排序的几种方法:

1、冒泡排序

#include<stdio.h>
int main()
{
    int a[10],i,j,t;
    for(i=0; i<10; i++)
        scanf("%d",&a[i]);
    printf("\n");
    for(j=0; j<9; j++)
        for(i=0; i<9-j; i++)
            if(a[i]<a[i+1])
            {
                t=a[i];
                a[i]=a[i+1];
                a[i+1]=t;
            }
    for(i=0; i<10; i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}

2、选择排序

#include<stdio.h>
int main()
{
    void sort(int x[],int n);
    int a[10],i;
    for(i=0; i<10; i++)
        scanf("%d",&a[i]);
    sort(a,10);
    for(i=0; i<10; i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}
void sort(int a[],int n)
{   int i,j,k,t;
    for(i=0; i<n-1; i++)
    {   k=i;
        for(j=i+1; j<n; j++)
            if(a[j]>a[k])
                k=j;
        t=a[k];
        a[k]=a[i];
        a[i]=t;
    }
}

 

3、用指针方法排序

 1 #include<stdio.h>
 2 int main()
 3 {   void sort(int x[],int n);
 4     int i,*p,a[10];
 5     p=a;
 6     for(i=0; i<10; i++)
 7         scanf("%d",p++);
 8     sort(p,10);
 9     for(i=0; i<10; i++)
10     {   printf("%d ",*p);
11         p++;
12     }
13     printf("\n");
14     return 0;
15 }
16 void sort(int *x,int n)
17 {   int i,j,k,t;
18     for(i=0; i<n-1; i++)
19     {   k=i;
20         for(j=i+1; j<n; j++)
21             if(*(x+j)>*(x+k))
22                 k=j;
23         if(k!=i)
24         {   t=*(x+i);
25             *(x+i)=*(x+k);
26             *(x+k)=t;
27         }
28     }
29 }

运行结果出错

错因:第7行代码p++应改为p+i,这样p的值就不会改变。否则要在第7行后加p=a,使p重新指会a的首地址。

二、多维数组元素的地址

a[i][j]  <=>  *(*(a+i)+j)  <=>  *(a[i]+j)  代表元素a[i][j]的值

a[i]+j  <=>  *(a+i)+j  <=>  &a[i][j]  代表a[i][j]的地址

用指针打印二维数组

#include<stdio.h>
int main()
{   int a[3][4]= {1,2,3,4,5,6,7,8,9,10,11,12};
    int *p;
    p=a;
    for(; p<a[0]+12; p++)
    {   if((p-a[0])%4==0)
            printf("\n");
        printf("%4d",*p);
    }
    printf("\n");
    return 0;
}

三、通过指针引用字符串

#include<stdio.h>
int main()
{   char a[]="I love China",b[20];
    int i;
    for(i=0; *(a+i)!='\0'; i++)
        *(b+i)=*(a+i);
    *(b+i)='\0';
    printf("%s\n",b);
    return 0;
}

 

posted @ 2018-12-19 23:33  YTHLW  阅读(163)  评论(0编辑  收藏  举报