二维数组的动态申请--c语言

作者:大宝同学

时间: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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值