指针变量指向的内存空间不仅可以是普通数据也可以是另一个指针。
动态二维数组示例:
代码如下:
#include<stdio.h>
#include<stdlib.h>
int **assign(int size,int n1,int n2);
void destroy(int **p,int n1,int n2);
int main()
{
int i,j,n1,n2;
int **test;
printf("输入二维数组行数和列数:");
scanf("%d%d",&n1,&n2);
test=assign(sizeof(int),n1,n2);
if(test==NULL)
{
return 0;
}
for(i=0;i<n1;i++)
{
for(j=0;j<n2;j++)
{
test[i][j]=i+1+j;
printf("%d ",test[i][j]);
}
printf("\n");
}
destroy(test,n1,n2);
return 0;
}
int **assign(int size,int n1,int n2)
{
int i,j;
int **q=(int **)malloc(sizeof(int*) * n1);
if(q==NULL)
{
return 0;
}
for(i=0;i<n1;i++)
{
*(q+i)=(int*)malloc(size * n2);
if(*(q+i)==NULL)
{
for(j=0;j<i;j++)
{
free(*(q+j));
}
free(q);
return 0;
}
}
return q;
}
void destroy(int **p,int n1,int n2)
{
int i;
for(i=0;i<n1;i++)
{
free(*(p+i));
}
free(p);
}
使用指向指针的指针可以建立动态二维数组。表面看是二维数组,实际并不是二维数组。