指針數組的應用


在實現排序功能的時候,一般都是通過交換值的形式,通過循環逐漸得到我們想要的順序。但是有時候排序通過值的交換實現起來比較麻煩,因此我們可以引用指針數組,通過交換地址的方式來得到我們想要的順序。

例:char a[4][10]={"CHINA","china","ABC","abcdef"}  將四個字符串通過從小到大的順序依次排序,如果用交換值的形式,實現起來就會比較麻煩。但是通過指針數組實現起來就很容易。

      char  *b[4]={a[0],a[1],a[2],a[3]}   定義一個指針數組分別依次指向字符數組,如下圖所示

  

 通過交換指針地址來實現從小到大的排序,指針數組b[0],指向的是最小字符串,b[3]指向最大字符串,如圖所示:

 

 具體代碼實現:C++為例

#include<iostream>   //調用cin,cout  輸入輸出函數

#include<stdlib.h>   //調用strcmp函數來比較字符串大小

using namespace std;  

int main()

{

     char a[4][10]={"CHINA","china","ABC","abcdef"};  //定義二維數組

     char *b[4]={a[0],a[1],a[2],a[3]};   //定義指針數組用來存放二維數組對應的內存地址

     char *temp; //定義交換兩個地址的中間變量指針;

     int i,j;      //通過冒泡法實現地址交換

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

    {

        for(j=0;j<=2-i;j++)

         {

             if(strcmp(b[j],b[j+1])>0)    //判斷指針指向的字符串的大小,如果前一個大於后一個,則交換彼此的內存地址

                {

                    temp=b[j];         //這里的三行交換的是內存地址,而不是值

                    b[j]=b[j+1];

                    b[j+1]=temp;

               }

        }

   }

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

    cout<<b[i]<<",";

  return(0);

}

 

總結:通過指針數組交換內存地址實現排序,解決一些交換數值比較麻煩的問題

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM