天天看點

指針字元串和數組指針

//指針是C語言的精髓,隻有掌握好指針才算是真正學會了C語言,以下就是學習指針的例子

#include<stdio.h>

main()

{

      void sort(char *name[],int n);

      void print(char *name[],int n);

      int strcmp1(char *str1,char *str2);

      int strcmp2(char *str1,char *str2);

      static char *name[]={"CHINW","CHINP","FRANC",

      "FRANCE","GERMANY"};

      int n=5;

      sort(name,n);

      print(name,n);

      if(strcmp1(name[0],name[1])>0)

      printf("%s,%s/n",name[0],name[1]);

      if(strcmp1(name[2],name[3])<0)

      printf("%s,%s/n",name[2],name[3]);

      printf("That is ok!/n");

      getch();

      return 0;

}

int strcmp1(char *str1,char *str2)

{

    char **p1,**p2; //定義兩個指向指針的指針的變量,可了解為位址的位址變量

    int f=0;        

    p1=&str1;       //給位址的變量賦待比較的字元串的位址值

    p2=&str2;

    for(;f==0&&(**p1!='/0'||**p2!='/0');(*p1)++,(*p2)++)//循環判斷字元串的操作

    {

       if(**p1<**p2)//比較每個字元的大小

       f=-1;

       else if(**p1>**p2)

       f=1;

       else f=0;

    }  

     return f;

}

int strcmp2(char *str1,char *str2)

{

    int f=0;

    for(;f==0&&(*str1!='/0'||*str2!='/0');str1++,str2++)//字元指針變量完成for語句的操作

    {

       if(*str1<*str2)//比較單個字元的大小

       f=-1;

       else if(*str1>*str2)

       f=1;

       else f=0;

    }  

     return f;

}

void sort(char *name[],int n)

{

     int i,j,k;

     char *pt;

     for(i=0;i<n-1;i++)

     {

        k=i;    

        for(j=i+1;j<n;j++)

          if(strcmp2(name[k],name[j])>0)

              k=j;

              if(k!=i)

              {

                pt=name[i];

                name[i]=name[k];

                name[k]=pt;

              }

        }

}

void print(char *name[],int n)

{

     int i;

     char **p;

     char *format;

     format="%s/n";

     for(i=0;i<n;i++)

     {

       p=name+i;

       printf(format,*p);

     }

}  

繼續閱讀