一、二级指针的第一种内存模型
《1》内存模型图:
《2》程序实现:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int Printarr(char** arraystr,int Numi)
{
int i=0;
for(i=0;i<Numi;i++)
{
printf("array为:%s\n",arraystr[i]);
}
return 0;
}
int SortArr(char**arraystr,int Numi)
{
int ret=0;
int i,j;
char*tmp=NULL;
if(arraystr==NULL)
{
ret=-1;
return ret;
}
for(i=0;i<Numi;i++)//选择排序法
{
for(j=i+1;j<Numi;j++)
{
if(strcmp(arraystr[i],arraystr[j])>0)//比较,若前面比后面大,交换
{
tmp=arraystr[i];
arraystr[i]=arraystr[j];
arraystr[j]=tmp;
}
}
}
return ret;
}
void main()
{
int i,j=0;
char*tmp=NULL;
char* array[]={"bbbbb","aaaa","cccc","1111","zzzzz"};//指针数组
printf("排序之前:\n");
Printarr(array,5);//打印
SortArr(array, 5);//排序
printf("排序之后:\n");
Printarr(array);
system("pause");
}
《3》运行结果:
二、二级指针的第二种内存模型
《1》内存模型图:
《2》程序实现:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int Printarr01(char arraystr2[10][30],int numi )
{
int i=0;
for(i=0;i<numi;i++)
{
printf("array1为:%s\n",arraystr2[i]);
}
return 0;
}
int SortArr2(char arraystr[10][30],int Numi)
{
int ret=0;
int i,j;
char tmp[30];//*****************重点************************8
if(arraystr==NULL)
{
ret=-1;
return ret;
}
for(i=0;i<Numi;i++)//选择排序法
{
for(j=i+1;j<Numi;j++)
{
if(strcmp(arraystr[i],arraystr[j])>0)//比较,若前面比后面大,交换
{
strcpy(tmp,arraystr[i]);
strcpy(arraystr[i],arraystr[j]);
strcpy(arraystr[j],tmp);
}
}
}
return ret;
}
void main()
{
char array1[10][30]={"bbbbb","aaaa","cccc","1111","zzzzz"};
int i=0;
printf("排序之前:\n");
Printarr01( array1,5);
SortArr2(array1,5);
printf("排序之后:\n");
Printarr01( array1,5);
system("pause");
}
《3》运行结果:
三、二级指针的第三种内存模型
《1》内存模型图:
(1)手动开辟内存空间,
(2)注意避免内存泄露问题
(3)先开辟的空间后释放,后开辟的先销毁,
(4)类似于模型一
《2》程序实现:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int Printarr(char** arraystr,int Numi)
{
int i=0;
for(i=0;i<Numi;i++)
{
printf("array为:%s\n",arraystr[i]);
}
return 0;
}
int SortArr(char**arraystr,int Numi)
{
int ret=0;
int i,j;
char*tmp=NULL;
if(arraystr==NULL)
{
ret=-1;
return ret;
}
for(i=0;i<Numi;i++)//选择排序法
{
for(j=i+1;j<Numi;j++)
{
if(strcmp(arraystr[i],arraystr[j])<0)//比较,若前面比后面大,交换
{
tmp=arraystr[i];
arraystr[i]=arraystr[j];
arraystr[j]=tmp;
}
}
}
return ret;
}
void main()
{
int i=0;
char** myarray=(char**)malloc(10*sizeof(char*));
if(myarray==NULL)
{
return;
}
for(i=0;i<10;i++)
{
myarray[i]=(char*)malloc(100*sizeof(char));
if (myarray[i] == NULL)
{
return;
}
sprintf(myarray[i],"%d%d%d ", i, i, i);//将i,i,i打印到myarray[i]中
}
printf("排序之前:\n");
Printarr(myarray,10);
SortArr(myarray,10);
printf("排序之后:\n");
Printarr(myarray,10);
for(i=0;i<10;i++)
{
free(myarray[i]);
}
if(myarray!=NULL)
{
free(myarray);
}
system("pause");
}
《3》运行结果: