题目

  • 给一组字符串{"lele","lili","lilei","hanmeimei","hanmeiemi"}排序,要求不改变字符数组的内容,即采用索引式排序。

思想

  • 二级指针的偏移场景

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void print(char **p)
{
    int i;
    for(i=0;i<5;i++)
    {
        puts(p[i]);
    }

}

void print_two(char (*p)[10])
{
    int i;
    for(i=0;i<5;i++)
    {
        puts(p[i]);
    }
}


int main()
{
    char **p;
    char *tmp;
    int i,j;
    char b[5][10]={"lele","lili","lilei","hanmeimei","zhousi"};
    p=(char**)malloc(sizeof(char*)*5);//2012版本,申请内存空间必须放在定义语句的后面
    for(i=0;i<5;i++)
    {
        p[i]=b[i];
    }
    for(i=4;i>0;i--)//冒泡排序法
    {
        for(j=0;j<i;j++)
        {
            if(strcmp(p[j],p[j+1]) > 0)
            {
                tmp=p[j+1];
                p[j+1]=p[j];
                p[j]=tmp;
            }

        }

    }
    printf("排序后:\n");
    print(p);//打印二级指针所指向的内存空间的指针
    puts("**************************");
    printf("排序前:\n");
    print_two(b);//打印二维数组
    system("pause");
}

执行结果
图片说明