fmalloc函数的作用是动态地分配一段连续的空间,并返回这块空间的首地址,如下,p就是*p的地址
int *p;
//*p=3;
//(error)
p=(int*)malloc(sizeof(int));
*p=3;
//3
按照这个思路推下去,如果int **p的话,*p就是**p的地址,*p=(int*)malloc(sizeof(int))就是分配一段连续的内存,首地址返回给*p,如下图
int **p;
*p=(int*)malloc(sizeof(int));
**p=3;
//(error)
为什么还是error?因为p还是薛定谔状态,所以还要给p分配内存并返回地址,如下图
int **p;
p=(int**)malloc(sizeof(int*));
*p=(int*)malloc(sizeof(int));
**p=3;
printf("%d",**p);
//3
如果在给*p和**p都分配内存后给p[1][2]赋值,就会输出空
int **p;
p=(int**)malloc(sizeof(int*)*10);
*p=(int*)malloc(sizeof(int)*10);
*(*(p+1)+2)=3;
printf("%d",*(*(p+1)+2));
//(null)
这是因为还没有给p[1]分配内存,正确的如下
int **p;
p=(int**)malloc(sizeof(int*)*10);
*(p+1)=(int*)malloc(sizeof(int)*10);
*(*(p+1)+2)=3;
printf("%d",*(*(p+1)+2));
//3