//# 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;
}