#define _CRT_SECURRE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
/*功能:把myp1,myp2指向的数据拷贝到myp3,并且排序*/
int sort(char**myp1,int num1,char(*myp2)[30],int num2,char***myp3,int *num3)
{
char** p3 =NULL;
int i,j,tmplen,n;
char*tmp;
p3 = (char**)malloc((num1+num2)*sizeof(char*));
if (p3 == NULL)
{
return -1;
}
for (i =0;i<num1;i++)
{
tmplen = strlen(myp1[i])+1;
p3[i] = (char*)malloc(tmplen*sizeof(char));
if (p3[i]==NULL)
{
return -2;
}
strcpy(p3[i],myp1[i]);
}
for (j = 0;j<num2;j++)
{
//printf("%d\n",i+j);
tmplen = strlen(myp2[j])+1;
p3[i+j] = (char*)malloc(tmplen*sizeof(char));
strcpy(p3[i+j],myp2[j]);
}
//排序
tmplen = num1+num2;
for (i = 0;i< tmplen;i++)
{
for (j = i+1;j<tmplen;j++)
{
if (strcmp(p3[i],p3[j])>0)
{
tmp = p3[i];//交换指针 改变指针指向
p3[i] = p3[j];
p3[j] = tmp;
}
}
}
*myp3 = p3;//间接赋值是指针存在的最大意义
*num3 = tmplen;//间接赋值是指针存在的最大意义
return 0;
}
void printResult(char**p,int len)
{
int i;
for (i=0;i<len;i++)
{
printf("%s\n",p[i]);
}
}
//释放二级指针内存空间
void freeSource(char **p,int len)
{
int i = 0;
if (p==NULL)
{
return;
}
for ( i = 0;i<len;i++)
{
free(p[i]);
}
free(p);
}
//释放二级指针内存空间
void freeSource2(char ***p,int len)
{
int i = 0;
char **tmp = NULL;
tmp = *p;
if (tmp==NULL)
{
return;
}
for ( i = 0;i<len;i++)
{
free(tmp[i]);
}
free(tmp);
*p = NULL;
}
int main()
{
/*p1,buf2主调函数分配内存*/
char*p1[]= {"bbbbbb","aaaaaaa","ccccccc"};
char buf2[10][30]={"333333","111111","222222"};
/*p3被调函数分配内存,通过函数参数返回*/
char**p3 = NULL;
int len1,len2,len3,ret = 0,i;
len1 = sizeof(p1)/sizeof(*p1);
//printf("len1:%d\n",len1);
len2 = 3;
//printf("sizeof(buf2):%d\n",sizeof(*buf2));
ret = sort(p1,len1,buf2,len2,&p3,&len3);
if (ret!=0)
{
printf("func sort() err:%d\n",ret);
}
//printf("hello\n");
printResult(p3,len3);
freeSource2(&p3,len3);
system("pause");
return;
}
二级指针三种内存模型强化训练
最新推荐文章于 2020-11-11 14:48:02 发布