/*level tow Point has three cache model*/#include <stdio.h> #include <stdlib.h>int Print (char**parr); int Print02 (Char**parr,int num); int getmem (Char***thirdmodel,int len); int destory (Char***thirdmodel,int len); int main () { int I=0;char **thirdmodel=null;//first Cache Modelchar *firstmodel[10]={"abc", "Linux", "Unix", 0};//second cache Modelchar secondmodel[3][10]={"abc", "Linux", "UNIX"};//third cache Modelgetmem (&thirdmodel,4); strcpy (* ( thirdmodel+0), "abc"), strcpy (* (thirdmodel+1), "Linux"), strcpy (* (thirdmodel+2), "Unix");p rintf ("Firstmodel start\n" ); Print (Firstmodel);p rintf ("Secondmodel start \ n"); Print02 (secondmodel,4);p rintf ("Thirdmodel start\n"); Print (Thirdmodel);D estory (&thirdmodel,4); return 0;} int Print (char**parr) {int ret=0,i=0;if (Null==parr) {ret=-1;printf ("arg is NULL error:%d\n", ret); return ret;} while (*parr) {printf ("%s\n", *parr); ++parr;} return ret;} int Print02 (Char**parr,int num) {int ret=0,i=0;//Two-level pointers are not the same as pointers to arrays. char (*arr) [10]=parr;if (Null==parr) {ret=-1;printf ("Arg is Null error:%d\n ", ret); return ret;} for (i=0;i<num;i++) {printf ("%s\n", * (Arr+i));} return ret;} Level three pointer do output model int getmem (Char***thirdmodel/*out*/,int len) {int ret=0,i=0;if (Null==thirdmodel | | len<=0) {ret=-1; return ret;} char**tmp= (char**) malloc (len*sizeof (char*)), if (null==tmp) {ret=-1;return ret;} for (i=0;i<len-1;i++) {* (tmp+i) = (char*) malloc (100*sizeof (char)); if (null==* (tmp+i)) {Ret=-1;return ret;}} * (tmp+ (len-1)) =0;*thirdmodel=tmp;return ret;} Destroys memory on heap int destory (Char***thirdmodel,int len) {int Ret=0,i=0;char **tmp=null;if (Null==thirdmodel | | len<=0) {ret= -1;return ret;} Tmp=*thirdmodel;for (i=0;i<len;i++) {if (null!=* (tmp+i)) {Free (* (tmp+i)); * (Tmp+i) =null;}} Free (TMP); *thirdmodel=null;return ret;}
Three-clock memory model with two pointers