C语言创建连续地址动态二维数组

通常利用数组指针来创建动态二维数组,但是地址是不连续的,如果想创建连续地址动态二维数组则没有好办法,下面的方法可以实现地址连续,但是需要固定列数,行数是动态创建的。

// 定义有1000个整数的数组类型,此时a只表示类型,不占空间,列数须要初始设定
int (*a)[1000];
a = (int (*)[1000])malloc(500 * 1000 * sizeof(int)); // 分配空间,这里500是行数
memset(a, 0, 500 * 1000 * sizeof(int)); // 清零
/*
二维数组表示为如下:
a[0] = {a[0][0], a[0][1], a[0][2], ..., a[0][999]}
a[1] = {a[1][0], a[1][1], a[1][2], ..., a[1][999]}
a[2] = {a[2][0], a[2][1], a[2][2], ..., a[2][999]}
...
a[499] = {a[499][0], a[499][1], a[499][2], ..., a[499][999]}
*/
a[0][10] = 8;
free(a); // 释放空间

另外注意区别以下定义:

int* a[1000];	// 表示创建包含1000个整型指针的数组,已分配存储空间
int (*a)[1000]; // 定义了一个有1000个整数的数组类型,未分配存储空间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值