在實現排序功能的時候,一般都是通過交換值的形式,通過循環逐漸得到我們想要的順序。但是有時候排序通過值的交換實現起來比較麻煩,因此我們可以引用指針數組,通過交換地址的方式來得到我們想要的順序。
例: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);
}
總結:通過指針數組交換內存地址實現排序,解決一些交換數值比較麻煩的問題