指针数组的应用

Posted hzb1224

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针数组的应用相关的知识,希望对你有一定的参考价值。

在实现排序功能的时候,一般都是通过交换值的形式,通过循环逐渐得到我们想要的顺序。但是有时候排序通过值的交换实现起来比较麻烦,因此我们可以引用指针数组,通过交换地址的方式来得到我们想要的顺序。

例: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);

 

总结:通过指针数组交换内存地址实现排序,解决一些交换数值比较麻烦的问题

 

以上是关于指针数组的应用的主要内容,如果未能解决你的问题,请参考以下文章

4C_复杂表达式和指针高级应用

C语言指针指向一维数组与二维数组?

C语言中二维数组名是否可以看作指针数组名?

数组名相当于一个指针,哪数组指针char *p[],不就变成一个二级指针?

双指针应用--快慢指针

指针数组的应用