二级指针的3种内存模型

二级指针的内存模型

二级指针的第一种内存模型

Char*Accary [ ]={ “aaaaaa”, ”bbbbbb”, ”ccccccc” };

//接口形参使用方式

Intprintfarr(char**ArrayStr,int iNUm)

{

For(i =0; i<iNUm; i++)

{


Printf(“%s \n”, ArrayStr[i]);

}

}

//调用方式

Printfarr(Accary, 3);


二级指针的第二种内存模型

CharArray[10][30]={“aaaa”, “bbbb”, “cccccc”,};


//接口形参使用方式

Voidabc(char Arrary[30],4 )

{

For(i=0; i<4; i++)

{

Printf(“%s \n”,Accary[i]);

}

}

//调用方式

Printfarr(Array, 3);


二级指针的第三钟内存模型

char**real = (char **)malloc(3*sizeof(char *));

for(int i=0; i<3; i++)

{

real[i]= (char *)malloc(30*sizeof(char));

}


sprintf(real[0],"dbsiudaudhakdhjhba");

sprintf(real[1],"b");

printf("%s\n", real[1]);

//接口形参使用方式

Intprintfarr(char**ArrayStr,int iNUm)

{

For(i =0; i<iNUm; i++)

{


Printf(“%s \n”, ArrayStr[i]);

}

}

//调用方式

Printfarr(Accary, 3);



二级指针的3种内存模型_第1张图片二级指针的3种内存模型_第2张图片

形参写法的引申:

Voidstr(char abc[30]);

voidstr(char abc[ ]);一维数组做形参,退化为指针

voidstr(char abc);手工加*,手工完成编译器任务

//针对第二种内存模型

Voidstr(char abc[30][60]);

voidstr(char abc[ ][60]);二维数组做形参,退化为指针,60为指针步长

voidstr(char (*abc)[60]);手工加*,手工完成编译器任务,其实就是数组指针


等价关系

数组参数 等效指针参数


一维数组chara[ 30 ] ------------------------------->指针char× a

指针数组char × a [ 30]-------------------------------->指针的指针char× × a

二位数组chara[30 ][30]-------------------------------->数组的指针char(×a)[30]


你可能感兴趣的:(二维数组,内存,指针,C编程)