打印 排序:
//自己打造内存空间
void main()
{
int i = 0,j=0;
char** p2 = NULL;
char*tmp;
char tmpbuf[100];
int num = 5;
p2 = (char**)malloc(sizeof(char*)*num);
for (i = 0; i < num;i++)
{
p2[i] = (char*)malloc(sizeof(char) * 100);//相当于 char buf[100];
sprintf(p2[i],"%d%d%d",i+1,i+1,i+1);//向内存空间中打印数据
}
//打印
for (i = 0; i < num; i++)
{
printf("%s\n",p2[i]);
}
//排序
//交换指针指向
for (i = 0; i < num; i++)
{
for (j = i + 1; j < num;j++)
{
if (strcmp(p2[i],p2[j])>0)
{
tmp = p2[i];
p2[i] = p2[j];
p2[j] = tmp;
}
}
}
//交换内存块的数据
for (i = 0; i < num; i++)
{
for (j = i + 1; j < num; j++)
{
if (strcmp(p2[i], p2[j])>0)
{
strcmp(tmpbuf,p2[i]);
strcmp(p2[i],p2[j]);
strcmp(p2[j],tmpbuf);
}
}
}
//释放内存 先申请的后释放
for (i = 0; i < num; i++)
{
if (p2[i] != NULL)
{
free(p2[i]);
p2[i] = NULL;
}
}
if (p2 != NULL)
{
free(p2);
p2 = NULL;
}
printf("\nhehhe");
system("pause");
return;
}
封装成函数:
//产生molloc内存
char**getMem(int num)
{
int i = 0, j = 0;
char** p2 = NULL;
if (p2 == NULL)
{
return NULL;
}
p2 = (char**)malloc(sizeof(char*)*num);
for (i = 0; i < num; i++)
{
p2[i] = (char*)malloc(sizeof(char) * 100);//相当于 char buf[100];
sprintf(p2[i], "%d%d%d", i + 1, i + 1, i + 1);//向内存空间中打印数据
}
return p2;
}
//打印
void printMyArray03(char**myArray, int num)
{
int i = 0;
for (i = 0; i < num; i++)
{
printf("%s\n", myArray[i]);// printf("%s\n", *(myArray+i));
}
}
//排序 交换指针
void sortMyArray03(char**myArray, int num)
{
int i = 0, j = 0;
char*tmp = NULL;
for (i = 0; i < num; i++)
{
for (j = i + 1; j < num; j++)
{
if (strcmp(myArray[i], myArray[j]) > 0)//前面的大 交换
{
//交换的指针指向
tmp = myArray[i]; //注意 交换的是数组元素 交换的是指针的值 //改变指针的指向
myArray[i] = myArray[j];
myArray[j] = tmp;
}
}
}
}
//释放
void getMem03_Free(char**p2,int num)
{
int i = 0;
for (i = 0; i < num; i++)
{
if (p2[i] != NULL)
{
free(p2[i]);
p2[i] = NULL;
}
}
if (p2 != NULL)
{
free(p2);
p2 = NULL;
}
}
void main()
{
int i = 0, j = 0;
char** p2 = NULL;
char*tmp;
char tmpbuf[100];
int num = 5;
p2 =getMem(num);
//打印
printMyArray03(p2,num);
//排序
//交换指针指向
sortMyArray03(p2,num);
printMyArray03(p2, num);
//释放内存 先申请的后释放
getMem03_Free(p2,num); //释放完后 实参main函数的p2还是一个野指针
if (p2 != NULL)
{
free(p2);
p2 = NULL;
}
printf("\nhehhe");
system("pause");
return;
}