【问题标题】:Size of a 2d array in C++C++中二维数组的大小
【发布时间】:2019-10-18 21:00:05
【问题描述】:

我正在解决像 Leetcode 这样的在线判断问题,我想知道是否有可能在给定 int**A 的情况下获得二维数组的大小。考虑函数,

 int help(int** A){
       int rows = sizeof(A)/sizeof(A[0]);
       int columns = sizeof(A[0])/sizeof(A[0][0]);
}

但我没有得到正确的行和列值。 如果我只有 int** A,有没有办法获得二维数组的大小。对于 char** A 也有同样的问题。 我知道这个问题的框架很糟糕,但我是 C 的初学者。谢谢。

【问题讨论】:

标签: c++ pointers multidimensional-array


【解决方案1】:

不,这是不可能的。

分配的内存中没有任何内容表明它的开始和结束位置。对于二维数组,甚至不能保证内存是连续的。

**A 不包含任何关于其自身的数据 - 所有关于数组的信息都必须由程序员跟踪。

【讨论】:

  • 实际上**A 不是指向数组中第一个元素的指针。它是指向另一个指向 int 的指针的指针。后面可能有也可能没有整数。它也可能是指向指针数组的指针,并且该数组的第一个元素指向一个 int。但这都是猜测。唯一可以确定的是它是一个指向 int 的指针。
  • **A 不是“指向 int 指针的指针的地址”。 **A 实际上是一个int*A 是指向int 的指针,它的值是int 的地址。 A 是一个指向 int 指针的指针 - 所以它的值可能是指向 int 的指针的地址。
  • @Peter 我应该参考声明 int **A,它声明了一个指向 int 指针的指针。当然,您是正确的,独立表达式 **A 只是一个 int。但我认为上下文很清楚,因为**A 只出现在声明中。
  • @doug - 我没有回复你的评论。我当时回复了答案的内容——上面说**A是“指向int指针的指针的地址”。此后已对其进行编辑以删除该文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 2020-06-10
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
  • 2020-01-18
相关资源
最近更新 更多