二级指针做输入的三种内存模型(一)

二级指针做输入的第一种内存模型:
 
  
 
  
#include<stdio.h>
int main()
{
    char *buffer[]={"111","333","222"};
}

在上面的代码中buffer[ ]是不是一个数组呢?很明显是。只不过buffer[ ]中的每一个元素都是指针,也就是我们所说的指针数组。
首先我们进行打印,代码如下:

#include<stdio.h>
int main()
{
    int i,num;
    char *buffer[]={"111","333","222"};
    num=sizeof(buffer)/sizeof(buffer[0]);//求数组长度
    for(i=0;i<num;i++)
    {
        printf("%s"\n,buffer[i]);
        //或printf("%s"\n,*(bufer+i)。因为buffer[i]是不是等价于*(buffer+i)呢?
    }
}

我们如何对上面的元素进行排序呢?代码如下:

 
#include<stdio.h>
#include<string.h>
int main()
{
    int i,j,num;
    char *buffer[]={"111","333","222"};
    char *temp;
    num=sizeof(buffer)/sizeof(buffer[0]);
    for(i=0;i<num;i++)
    {
       for(j=i;j<num;j++)
       {
            if(strcmp(buffer[i],buffer[j])>0)
            {
                temp=buffer[i];       //temp是指针
                buffer[i]=buffer[j];
                buffer[j]=temp;
            }
       }
    }
}

这样我们是不是通过交换指针实现了排序?也就是说交换了buffer中的元素。

在上述代码中,我们都是在main()中实现打印及排序,但为了使程序的可移植性更高,我们是不是应该自定义函数,实现上述功能呢?

自定义打印代码如下:

#include<stdio.h>
void print(char **buffer,int num)
{
    int i;
  for(i=0;i<num;i++)
  {
        printf("%s"\n,buffer[i]);
        //或printf("%s"\n,*(bufer+i)。因为buffer[i]是不是等价于*(buffer+i)呢?
  }
}
int main(){
int num;
char *buffer[]={"111","333","222"};
  num=sizeof(buffer)/sizeof(buffer[0]);
  print(buffer,num);
}

这样我们就实现了自定义函数打印二级指针的值。接下来我们进行排序:

 
 
#include<stdio.h>
void sort(char **buffer,int num)
{
    char *temp;
    int i;
  for(i=0;i<num;i++)
    {
       for(j=i;j<num;j++)
       {
            if(strcmp(buffer[i],buffer[j])>0)
            {
                temp=buffer[i];       //temp是指针
                buffer[i]=buffer[j];
                buffer[j]=temp;
            }
       }
    }
}
int main()
{
int num;
char *buffer[]={"111","333","222"};
  num=sizeof(buffer)/sizeof(buffer[0]);
  sort(buffer,num);
}

这样我们就实现了自定义函数实现二级指针的排序。内存模型图如下:


猜你喜欢

转载自blog.csdn.net/wang_zhao_/article/details/80611244
今日推荐