作者:大宝同学
时间:2016-5-9
测试环境:gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
(学习笔记,学习的狄泰视频C语言课程,推荐大家可以购买学习,实力广告一波:http://course.dt4sw.com/ ps:没有广告费的。。。)
二维数组名可以看做是指向数组的常量指针
二维数组可以看做是一维数组,其中的每个元素都是同类型的一维数组
#include <stdio.h>
#include <stdlib.h>
int **malloc2d(int row, int col)
{
int i = 0;
int **p = (int **)malloc(row * sizeof(int *));
int *pa = (int *)malloc(row * col * sizeof(int));
if((p!=NULL) && (pa!=NULL))
{
for(i=0; i<row; i++)
*(p + i) = pa + i * col;
for(i=0; i<row; i++)
printf("p[%d] = %p\n", i, *(p+i));
printf("\n");
}
else
{
free(pa);
free(p);
pa = NULL;
p = NULL;
}
return p;
}
void free2d(int **p)
{
free(*p);
free(p);
}
int main()
{
int i = 0;
int j = 0;
int *tmp = NULL;
int **p = malloc2d(3, 4);
for(i=0; i<3; i++)
printf("p[%d] = %p\n", i, *(p+i));
tmp = *p;
printf("tmp = %p\n", tmp);
for(i=0; i<12; i++)
*(tmp + i) = i;
for(i=0; i<3; i++)
{
for(j=0; j< 4; j++)
printf("%d, ", *(*(p+i) + j));
printf("\n");
}
free2d(p);
return 0;
}