今天公司实习的学弟,问我指针问题,我就给他总结了几个,这里也分享给大家。
当然,不是那么全面,不过学会这些,应付简单的指针问题还是OK的。
这里我把注释都删掉了,让大家自己研究去吧,当然,如果有哪里错了,也请大家指出。谢谢。
#include <stdio.h>
int *(*Fun(int)) ;
typedef *(*(*PFUN)(int)) ;
int main()
{
int p1 ;
int (*p2) ;
int i = 0;
for (i=0;i<5;i++)
{
p1[i] = i+1;
}
p2 = &p1;
printf("-> 01 <-\n");
for (i=0;i<5;i++)
{
printf("%d\n",(*p2)[i]) ;
}
//////////////////////////////
printf("-> 02 <-\n");
int (*(*p3)) = NULL;
p3 = &p2;
for (i=0;i<5;i++)
{
printf("%d\n",(**p3)[i]) ;
}
//////////////////////////////
printf("-> 03 <-\n");
int *p5 ;
for (i=0;i<5;i++)
{
p5[i] = new int;
*p5[i] = i+100;
}
int *(*p4) = NULL;
p4 = &p5;
for (i=0;i<5;i++)
{
printf("%d\n",*(*p4)[i]) ;
delete (*p4)[i];
}
//////////////////////////////
printf("-> 04 <-\n");
int **p6 = (int **)Fun(200);
for (i=0;i<5;i++)
{
printf("%d\n",*p6[i]);
delete p6[i];
}
delete p6;
///////////////////////////////////////////
printf("-> 05 <-\n");
PFUN pFun = Fun;
int **p7 = (int **)pFun(300);
for (i=0;i<5;i++)
{
printf("%d\n",*p7[i]);
delete p7[i];
}
delete p7;
///////////////////////////////////////////
printf("-> 06 <-\n");
int *(*(*p8 )(int)) ;
for (i=0;i<5;i++)
{
p8[i] = (int *(*(__cdecl *)(int)) )pFun( (i+1)*500);
//*(p8+i) = (int *(*(__cdecl *)(int)) )pFun( (i+1)*500);
}
for (i=0;i<5;i++)
{
for (int j=0;j<5;j++)
{
printf("%d\n",*((int**)(p8[i]))[j]);
delete ((int**)(p8[i]))[j];
}
delete (int*)(p8[i]);
}
return 0;
}
int *(*Fun(int nValue))
{
/*
static int *p ;
for (int i=0;i<5;i++)
{
p[i] = new int;
*p[i] = i + nValue;
}
return &p;
*/
int **p = new int * ;
for(int i=0;i<5;i++)
{
p[i] = new int;
*p[i] = i + nValue;
}
return (int *(*) )p;
}