详解C语言-二级指针三种内存模型
二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别
第一种内存模型char*arr[]
若有如下定义
char*arr[]={"abc","def","ghi"};
这种模型为二级指针的第一种内存模型,在理解的时候应该这样理解:定义了一个指针数组(char*[]),数组的每个元素都是一个地址。
在使用的时候,若要使用中间量操作元素,那么此时中间量应该定义为
char*tmp=NULL;
如果要打印这个数组,那么可以使用以下函数
intprintAarray(char**pArray,intnum)
{
inti=0;
if(pArray==NULL)
{
return-1;
}
for(i=0;i
第二种内存模型chararr[][]
若有如下定义
chararr[3][5]={"abc","def","ghi"};
这种模型为二级指针的第二种内存模型,在理解的时候应该这样理解:定义了一个二维数组,有3个(5个char)空间的存储变量。
在使用的时候,若要使用中间量操作元素,那么此时中间量应该定义为
chartmp[5]={0};
如果要打印这个数组,那么可以使用以下函数
ntprintAarray(charpArray[][5],intnum)
{
inti=0;
if(pArray==NULL)
{
return-1;
}
for(i=0;i
第三种内存模型char**arr
若有如下定义
char**arr=(char*)malloc(100*sizeof(char*));//chararr[400]
arr[0]=(char*)malloc(100*sizeof(char));//charbuf[100]
arr[1]=(char*)malloc(100*sizeof(char));
arr[2]=(char*)malloc(100*sizeof(char));
strcpy(arr[0],"abc");
strcpy(arr[1],"def");
strcpy(arr[2],"ghi");
···
for(inti=0;i<3;i++)
if(arr[i]!=NULL)
free(arr[i]);
free(arr);
这种模型为二级指针的第二种内存模型,在理解的时候应该这样理解:定义了一个二级指针,二级指针就是指向指针的指针,其实就是开辟了100个指针空间,存放了100个地址。这种写法是第一种的简化写法
在使用的时候,若要使用中间量操作元素,那么此时中间量应该定义为
char*tmp=NULL
如果要打印这个数组,那么可以使用以下函数
{
inti=0;
if(pArray==NULL)
{
return-1;
}
for(i=0;i
例子
把第一种内存模型的数据排序,运算结果放到第三种内存模型中
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
char**SortArrayAndGen3Mem(constchar**constmyArray1,intnum,char*str,int*myNum)
{
char**p=NULL;
p=(char**)malloc(num*sizeof(char*));
if(myArray1==NULL||str==NULL||myNum==NULL)
{
printf("传入参数错误\n");
p=NULL;
gotoEND;
}
*myNum=num;
for(inti=0;i0)
{
char*tmp=p[i];
p[i]=p[j];
p[j]=tmp;
}
}
}
for(inti=0;i0)
{
chartmp[100];
strcpy(tmp,(Arraystr)[i]);
strcpy((Arraystr)[i],(Arraystr)[j]);
strcpy((Arraystr)[j],tmp);
}
}
}
for(i=0;i
以上就是详解C语言-二级指针三种内存模型的详细内容,更多关于C语言-二级指针三种内存模型的资料请关注毛票票其它相关文章!