c二级指针3种内存分配

//# include " stdafx。h”

# include & lt; stdio.h>

# include & lt; stdlib.h>

# include & lt; string>

/*

*实现二级指针

*作者:呼呼作声

*/


///1。直接分配在栈上通过char[][]方式


int mainStack ()

{

char数组[3][5]={{‘问’,‘w’,‘e’,‘r’, ' b '},{‘一个’,‘s’,‘d’,‘f’,‘n’}, {' z ', ' x ', ' c ',‘v’,‘m’}};

(int i=0; i<3,我+ +)

{

(int j=0; j<5; j + +)

{

printf (" pa [% d] [% d]: % c \ t”, i, j, *(*(阵列+ i) + j));}

printf (" \ n ");

}

返回0;


}


///2。行分配在栈上,列分配到堆上,通过指针数组方式


int mainStackHeap ()
{

char * pa [3],

(int i=0; i<3,我+ +)

{

pa[我]=(char *) malloc (sizeof (char) * 5),

拷贝字符串(pa[我],“asdf”);

}

(i=0; i<3,我+ +)

{

(int j=0; j< strlen (pa[我]);j + +)

{

printf (" pa [% d] [% d]: % c \ t”, i, j, * (* (pa + i) + j));}

printf (" \ n ");

}

(i=0; i<3,我+ +)

{

自由(pa[我]);

pa[我]==NULL;


}

//自由(pa);

//pa=零;,//因为是栈,堆,所以不能免费pa

返回0;

}

///3。行分配在堆上,列分配到堆上,通过二级指针方式

int mainHeapHeap ()

{

char * * pa=, (char * *) malloc (sizeof (char *) * 3),

(int i=0; i<3,我+ +)

{

char * p=(char *) malloc (sizeof (char) * 5),

pa[我]=p;

拷贝字符串(p“asdf”);}

(i=0; i<3,我+ +)

{

(int j=0; j< strlen (pa[我]);j + +)

{

printf (" pa [% d] [% d]: % c \ t”, i, j, * (* (pa + i) + j));}

printf (" \ n ");

}

(i=0; i<3,我+ +)

{

自由(pa[我]);

pa[我]==NULL;


}

自由(pa);

pa=零;

返回0;

}

///4。测试

int主要(int命令行参数个数,char * argv [])

{


mainStack ();

printf (" - - - - - - - - - - - - - - - - - - \ n”);

printf (" - - - - - - - - - - - - - - - - - - \ n”);

mainStackHeap ();

printf (" - - - - - - - - - - - - - - - - - - \ n”);

printf (" - - - - - - - - - - - - - - - - - - \ n”);

mainHeapHeap ();

返回0;

}


c二级指针3种内存分配