我应该使用 **array 还是 (*array)[] 作为 2D 整数数组?

问题描述 投票:0回答:1

我正在编写一个函数,需要我传递一个二维整数数组作为参数,其中行数可变但列数固定。

我最初打算使用:

void function(int (*array)[cols]) {...}

将指针传递给整数数组,这将允许我使用

malloc()
根据所需的行数为每行分配内存。然而,问题是关于列的。

为行分配内存时,编译器是否会考虑指定大小的列(由

cols
给出)的适当内存,为所有行列分配足够的空间,从而利用连续内存?

如果没有,那就意味着我必须分别为每行的每一列分配内存,在这种情况下,直接使用

(*array)[]
而不使用
cols
变量不是更好,甚至更好双指针
**array

这些方法的功能或效率会有什么差异吗?

提前非常感谢!

arrays c pointers multidimensional-array
1个回答
0
投票
  1. **array
    - 指针到指针

优点:

  • 灵活性
  • 行可以有不同的大小

缺点:

  • 分配复杂
  • 多层次的间接性
  • 不适合缓存
  1. (*array)[cols]
    - 指向数组的指针

优点:

  • 简单分配
  • 一级间接
  • 更加缓存友好

缺点:

  • 更难的语法
  • 许多编译器不支持 VLA
© www.soinside.com 2019 - 2024. All rights reserved.