详解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;i 0) { chartmp[100]; strcpy(tmp,(Arraystr)[i]); strcpy((Arraystr)[i],(Arraystr)[j]); strcpy((Arraystr)[j],tmp); } } } for(i=0;i 以上就是详解C语言-二级指针三种内存模型的详细内容,更多关于C语言-二级指针三种内存模型的资料请关注毛票票其它相关文章!