|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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");
- }
复制代码
|
|