第三种模型说起来较前两者有一定的复杂,先上代码后上图。
/************************************************************************/
/* 第三种模型
1、先定义一个动态空间,大小为行数
2、再创建新的数组 并挂载在1中数组的每一个位置
/************************************************************************/
int main91()
{
int i = 0, j = 0;
char * tmp = NULL;
//1 定义一个含有100个char*类型元素的空间
char **pArr = (char**)malloc(100 * sizeof(char*)); // char *pArr[100]
//2 定义动态数组,大小根据情况确定 并挂载到1 上面数组对应的下标下
pArr[0] = (char*)malloc(10 * sizeof(char)); // char pArr[10]
pArr[1] = (char*)malloc(20 * sizeof(char)); // char pArr[20]
pArr[2] = (char*)malloc(23 * sizeof(char)); // char pArr[23]
pArr[3] = (char*)malloc(100 * sizeof(char)); // char pArr[100]
//3 给2中的数组进行赋值
strcpy_s(pArr[0], 6, "ccccc");
strcpy_s(pArr[1], 6, "aaaa");
strcpy_s(pArr[2], 6, "bbb");
strcpy_s(pArr[3], 6, "2222");
//4 循环遍历
printf("排序前\n");
for (i = 0; i < 4; i++)
{
printf("%s \n", pArr[i]);
}
//排序
for (i = 0; i < 4; i++)
{
for (j = i+1; j < 4; j++)
{
if (strcmp(pArr[i],pArr[j])>0)
{
tmp = pArr[i];
pArr[i] = pArr[j];
pArr[j] = tmp;
}
}
}
printf("排序后\n");
for (i = 0; i < 4; i++)
{
printf("%s \n", pArr[i]);
}
//5 释放内存
for (i = 0; i < 4; i++)
{
if (pArr[i]!=NULL)
{
free(pArr[i]);
pArr[i] = NULL;
}
}
if (pArr != NULL)
{
free(pArr);
}
pArr = NULL;
system("pause");
return 0;
}
上面的代码如下图:
那么当是参数的时候,代码如下:
/************************************************************************/
/* 函数名称:printArr
/* 函数功能:对二维数组中的元素进行打印
/* 参数1: 二维数组
/* 参数2: 数组元素个数
/* 返回值: 0正常 非0为不正常
/* 说明:
/************************************************************************/
int printArr3(char ** pArr, int num)
{
//循环遍历的参数
int i = 0;
//结果返回值
int ret = 0;
if (pArr == NULL)
{
ret = -1;
printf("func printArr() 参数 pArr 不能为空 err:%d \n", ret);
return ret;
}
if (num <= 0)
{
ret = -2;
printf("func printArr() 参数 num 不能小于等于 err:%d \n", ret);
return ret;
}
for (i = 0; i < num; i++)
{
printf("%s \n", pArr[i]);
}
return ret;
}
/************************************************************************/
/* 函数名称:sortArr
/* 函数功能: 对二维数组中的元素进行排序
/* 参数1: 二维数组
/* 参数2: 数组元素个数
/* 返回值: 0正常 非0为不正常
/* 说明:
/************************************************************************/
int sortArr3(char ** pArr, int num)
{
int i = 0, j = 0;
char* tmp = NULL;
int ret = 0;
if (pArr == NULL)
{
ret = -1;
printf("func printArr() 参数 pArr 不能为空 err:%d \n", ret);
return ret;
}
for (i = 0; i < num; i++)
{
//因为要用第一个和后面一个比较 所有使用i+1即可
for (j = i + 1; j < num; j++)
{
if (strcmp(pArr[i], pArr[j]) > 0)
{
tmp = pArr[i];
pArr[i] = pArr[j];
pArr[j] = tmp;
}
}
}
return ret;
}
int main()
{
int i = 0, j = 0;
char * tmp = NULL;
//1 定义一个含有100个char*类型元素的空间
char **pArr = (char**)malloc(100 * sizeof(char*)); // char *pArr[100]
//2 定义动态数组,大小根据情况确定 并挂载到1 上面数组对应的下标下
pArr[0] = (char*)malloc(10 * sizeof(char)); // char pArr[10]
pArr[1] = (char*)malloc(20 * sizeof(char)); // char pArr[20]
pArr[2] = (char*)malloc(23 * sizeof(char)); // char pArr[23]
pArr[3] = (char*)malloc(100 * sizeof(char)); // char pArr[100]
//3 给2中的数组进行赋值
strcpy_s(pArr[0], 6, "ccccc");
strcpy_s(pArr[1], 6, "aaaa");
strcpy_s(pArr[2], 6, "bbb");
strcpy_s(pArr[3], 6, "2222");
//4 循环遍历
printf("排序前\n");
printArr3(pArr, 4);
//排序
sortArr3(pArr, 4);
printf("排序后\n");
printArr3(pArr, 4);
//5 释放内存
for (i = 0; i < 4; i++)
{
if (pArr[i] != NULL)
{
free(pArr[i]);
pArr[i] = NULL;
}
}
if (pArr != NULL)
{
free(pArr);
}
pArr = NULL;
system("pause");
return 0;
}