| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
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[10];
 
 -         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)[30], 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[i] = (char*)malloc(30 * sizeof(char));
 
 -                 if (pArray3[i] == NULL)
 
 -                 {
 
 -                         return NULL;
 
 -                 }
 
 -         }
 
  
-         //把指针数组中的值存入模型
 
 -         for (i = 0; i < array1num; i++)
 
 -         {
 
 -                 strcpy(pArray3[i], pArray1[i]);
 
 -         }
 
  
-         //把二维数组中的值存入模型
 
 -         for (i = 0; i < array2num; i++)
 
 -         {
 
 -                 strcpy(pArray3[array1num+i], pArray2[i]);
 
 -         }
 
  
-         // 对模型排序
 
  
-         for (i = 0; i < num; i++)
 
 -         {
 
 -                 for (j=i+1; j<num; j++)
 
 -                         if (strcmp(pArray3[i], pArray3[j]) > 0)
 
 -                         {
 
 -                                 tmp = pArray3[i];
 
 -                                 pArray3[i] = pArray3[j];
 
 -                                 pArray3[j] = tmp;
 
 -                         }
 
 -         }
 
  
-         return pArray3;
 
 - }
 
  
- void main14()
 
 - {
 
 -         int i = 0;
 
 -         char **pArray3 = NULL;
 
 -         int nArray3Num = 0;
 
  
-         char *array1[] = {"bbbb", "cccccc", "aaaaaa", "555555", "22222","33333"};
 
  
-         char array2[10][30] = { "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[i]);
 
 -         }
 
  
-         system("pause");
 
 - }
 
  复制代码 
 
 
 |   
 
 
 
 |