c语言如何确定二维数组的大小,如何在C中创建给定大小的二维数组

06000

不,这不起作用.

main.cpp:4: error: only the first dimension of an allocated array may have dynamic size

new int[size][size];

^~~~

如果行的大小是固定的,那么你可以这样做:

// allocate an array with `size` rows and 10 columns

int (*array)[10] = new int[size][10];

在C中,您不能拥有两个维度的原始数组,其中两个维度都是动态的.这是因为原始数组索引按指针工作;例如,为了访问第二行,指向第一行的指针需要增加行的大小.但是当行的大小是动态的时,数组不知道该大小,因此C不知道如何弄清楚如何进行指针增量.

如果你想要一个具有多个动态维度的数组,那么你需要构造数组分配,以便C的默认数组索引逻辑可以处理它(例如this重复问题的最佳答案),或者你需要实现逻辑用于确定适当的指针增量.

对于每行具有相同大小的数组,我建议不要使用多个分配,例如那些答案建议,或使用向量向量.使用向量向量解决了手动执行分配的难度和危险性,但它仍然使用了比必要更多的内存,并且不允许更快的内存访问模式.

一种不同的方法,使多维数组扁平化,可以使代码像任何其他方法一样易于读取和写入,不使用额外的内存,并且可以执行更多,更好的操作.

扁平数组意味着您只使用与所需2D数组具有相同元素数的单个维数阵列,并执行算法以在多维索引和相应的单维索引之间进行转换.新的看起来像:

int *arr = new int[row_count * column_count];

第i行,第2列中的列j对应于arr [column_count * i j]. arr [n]对应于行n / column_count和列n%column_co

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值