moc 发表于 2018-8-22 14:44:16

019-二级指针的输出模型

1、易犯错误
        二级指向的内存空间不能写:
                1、指针所指向的内存不允许写 ;
                2、修改指针常量的值
int getMemBuf03(char **p2 /*out*/)
{
        char *tmp = NULL;
        tmp = (char*)malloc(100);


        *p2 = tmp;
        return 0;
}

void main1()
{
        //错误1
/*        char **p = NULL;
        getMemBuf03(p);
*/

        //错误2
/*        char buf;
        getMemBuf03(&buf);
*/
        system("pause");
}

2、二级指针输出模型
        熟悉二维内存的三种模型:1、指针数组 2、二维数组3、手工堆区二维内存;
        要想把在被调函数中手工创建的二维内存甩出来,即把二级指针传出来有两种方法:
                1. 采用指针函数的方法
                2.使用三级指针

代码示意:
        下面程序,在主函数中分别用指针数组和二维数组创建内存空间并赋初值,通过形参把他们传入被调函数,然后在被调函数中手工创建内存空间,将前两种内存空间的统一存入创建的内存空间并排序,最后以指针函数的方式把他传出来。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

char **sortArray1Array2(char **pArray1, int array1num, char(*pArray2), int array2num, int *array3num)
{
        int i = 0, j = 0;
        int num = array1num + array2num;
        *array3num = num;   //out
        char *tmp = NULL;

        // 手工打造二维模型
        char **pArray3 = (char **)malloc(num * sizeof(char *));
        if (pArray3 == NULL)
        {
                return NULL;
        }

        for (i = 0; i < num; i++)
        {
                pArray3 = (char*)malloc(30 * sizeof(char));
                if (pArray3 == NULL)
                {
                        return NULL;
                }
        }

        //把指针数组中的值存入模型
        for (i = 0; i < array1num; i++)
        {
                strcpy(pArray3, pArray1);
        }

        //把二维数组中的值存入模型
        for (i = 0; i < array2num; i++)
        {
                strcpy(pArray3, pArray2);
        }

        // 对模型排序

        for (i = 0; i < num; i++)
        {
                for (j=i+1; j<num; j++)
                        if (strcmp(pArray3, pArray3) > 0)
                        {
                                tmp = pArray3;
                                pArray3 = pArray3;
                                pArray3 = tmp;
                        }
        }

        return pArray3;
}

void main14()
{
        int i = 0;
        char **pArray3 = NULL;
        int nArray3Num = 0;

        char *array1[] = {"bbbb", "cccccc", "aaaaaa", "555555", "22222","33333"};

        char array2 = { "zzzzz", "yyyyy", "xxxxx" };

        pArray3 = sortArray1Array2(array1, 6, array2, 3, &nArray3Num);

        if (pArray3 == NULL)
        {
                printf("func sortArray1Array2()error");
                return;
        }

        for (i = 0; i < nArray3Num; i++)
        {
                printf("%s \n", pArray3);
        }

        system("pause");
}


页: [1]
查看完整版本: 019-二级指针的输出模型