二级指针做输入的模型003

 

自己分配内存,释放的时候一层一层释放

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

char ** getMem(int num)
{
    int i;
    char **p2 = NULL;
    p2 = (char **)malloc(sizeof(char* ) * num);
    if(p2 == NULL)
    {
        return NULL;
    }
    for(i = 0; i <num; i++)
    {
        p2[i] = (char *)malloc(sizeof(char) * 100); //char buf[100];
        sprintf(p2[i],"%d%d%d", i+1,i+1,i+1);
    }
    return p2;

}
void sortMyArray03(char ** myArray, int num)
{
    int i, j;
    char *tmp = NULL;
    //排序
    for(i = 0; i < num; i++)
    {
        for(j = i+1; j <num ; j++)
        {
            if(strcmp(myArray[i], myArray[j]) < 0)
            {
                tmp = myArray[i]; //注意  交换的是数组元素  交换的是指针的值
                myArray[i] = myArray[j];
                myArray[j] = tmp;
            }
        }
    }
}
void printfmyArray03(char ** myArray, int num)
{
    int i;
    for(i = 0; i < num; i++)
    {
        //printf("%s \n", myArray[i]);
        printf("%s \n", *(myArray+i));
    }
}
void getMem_Free(char **p2, int num)
{
    int i = 0;
    //释放内存
    for(i = 0; i <num; i++)
    {
        if(p2[i] != NULL)
        {
            free(p2[i]);
            p2[i] = NULL;
        }
    }
    if(p2 != NULL)
    {
        free(p2);
    }
}
int main(void)
{
    int i = 0;
    int j = 0;
    char **p2 = NULL;
    char *tmp;
    char tmpBuf[100];
    int num = 5;
    p2 = getMem(num);

    //排序之前
    printf("排序之前 \n");
    printfmyArray03(p2, num);
    
    /*
    //排序  交换的是指针的指向
    for(i = 0; i<num; i++)
    {
        for(j = i+1; j<num; j++)
        {
            if(strcmp(p2[i], p2[j]) < 0)
            {
                tmp = p2[i];
                p2[i] = p2[j];
                p2[j] = tmp;
            }
        }
    }
    */

    //排序  交换的是内存
    sortMyArray03(p2, num);
    /*
    for(i = 0; i<num; i++)
    {
        for(j = i+1; j<num; j++)
        {
            if(strcmp(p2[i], p2[j]) < 0)
            {
                strcpy(tmpBuf, p2[i]);
                strcpy(p2[i], p2[j]);
                strcpy(p2[i], tmpBuf);
            } 
        }
    }

    */
    //排序之后
    printf("排序之后 \n");
    printfmyArray03(p2, num);
    getMem_Free(p2, num);
    
    return 0;
}

 

posted @ 2017-05-02 16:53  Liu_Jing  Views(127)  Comments(0)    收藏  举报