鱼C论坛

 找回密码
 立即注册
查看: 2534|回复: 0

[学习笔记] 019-二级指针的输出模型

[复制链接]
发表于 2018-8-22 14:44:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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


  5.         *p2 = tmp;
  6.         return 0;
  7. }

  8. void main1()
  9. {
  10.         //错误1
  11. /*        char **p = NULL;
  12.         getMemBuf03(p);
  13. */

  14.         //错误2
  15. /*        char buf[10];
  16.         getMemBuf03(&buf);
  17. */
  18.         system("pause");
  19. }
复制代码


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

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

  4. char **sortArray1Array2(char **pArray1, int array1num, char(*pArray2)[30], int array2num, int *array3num)
  5. {
  6.         int i = 0, j = 0;
  7.         int num = array1num + array2num;
  8.         *array3num = num;   //out
  9.         char *tmp = NULL;

  10.         // 手工打造二维模型
  11.         char **pArray3 = (char **)malloc(num * sizeof(char *));
  12.         if (pArray3 == NULL)
  13.         {
  14.                 return NULL;
  15.         }

  16.         for (i = 0; i < num; i++)
  17.         {
  18.                 pArray3[i] = (char*)malloc(30 * sizeof(char));
  19.                 if (pArray3[i] == NULL)
  20.                 {
  21.                         return NULL;
  22.                 }
  23.         }

  24.         //把指针数组中的值存入模型
  25.         for (i = 0; i < array1num; i++)
  26.         {
  27.                 strcpy(pArray3[i], pArray1[i]);
  28.         }

  29.         //把二维数组中的值存入模型
  30.         for (i = 0; i < array2num; i++)
  31.         {
  32.                 strcpy(pArray3[array1num+i], pArray2[i]);
  33.         }

  34.         // 对模型排序

  35.         for (i = 0; i < num; i++)
  36.         {
  37.                 for (j=i+1; j<num; j++)
  38.                         if (strcmp(pArray3[i], pArray3[j]) > 0)
  39.                         {
  40.                                 tmp = pArray3[i];
  41.                                 pArray3[i] = pArray3[j];
  42.                                 pArray3[j] = tmp;
  43.                         }
  44.         }

  45.         return pArray3;
  46. }

  47. void main14()
  48. {
  49.         int i = 0;
  50.         char **pArray3 = NULL;
  51.         int nArray3Num = 0;

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

  53.         char array2[10][30] = { "zzzzz", "yyyyy", "xxxxx" };

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

  55.         if (pArray3 == NULL)
  56.         {
  57.                 printf("func sortArray1Array2()  error");
  58.                 return;
  59.         }

  60.         for (i = 0; i < nArray3Num; i++)
  61.         {
  62.                 printf("%s \n", pArray3[i]);
  63.         }

  64.         system("pause");
  65. }
复制代码



本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-22 04:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表