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]