计算双指针数组的长度

时间:2017-05-21 15:58:16

标签: c++ arrays

我有一个结构的双指针数组:

typedef struct Position{
    int x;
    int y;
} Position;

Position** array = (Position**)malloc(sizeof(Position*)*10); //10 elements
array[0] = (Position*)malloc(sizeof(Position*));
array[0]->x = 10;
array[0]->y = 5;

我可以计算集合数组的长度吗?如果可以,如何计算?

数组的常规方法不起作用:

int length = sizeof(<array>)/sizeof(<array>[0]);

3 个答案:

答案 0 :(得分:0)

一旦动态分配了一个数组,就无法找到其中的元素数量。

我曾经听说过一些hacky方法来获取内存块的大小,(msize)据说可以让你推断出块内数据的大小,但是我会反对任何这种奇怪的技巧,因为它们不属于标准,它们代表编译器供应商特定的扩展。

因此,了解数组大小的唯一方法是保持数组的大小。声明一个 private void txtSubTotal_TextChanged(object sender, EventArgs e) { double subTotal = 0; if(string.NullOrEmpty(txtPrice.Text)&&string.NullOrEmpty(txtQuantity.Text) { subTotal = Convert.ToDouble(txtPrice.Text) * Convert.ToDouble(txtQuantity.Text); txtSubTotal.Text = "" + subTotal; } } ,将数组及其长度放在结构中,并使用它而不是裸数组。

答案 1 :(得分:0)

当您将问题标记为C ++时,我建议您使用std::vector,然后,在您分配了一些内存后#34; (或要求由std::vector构造函数或使用push_backresize分配一些内存),您可以使用std::vector::size简单地恢复大小。

typedef struct Position{
    int x;
    int y;
} Position;

std::vector<Position> array(10);
array[0].x = 10;
array[0].y = 5;
size_t size = array.size(); // will be 10

答案 2 :(得分:0)

只有指向某个内存块的指针,您无法推迟该内存块的大小。所以你不能推迟其中的元素数量。

但是,对于指针数组,您可以在以下条件下推断出其中的元素数量:

  1. 确保每个指针(最后一个指针除外)指向有效对象。
  2. 表示数组中的最后一个指针,请确保它始终为foo
  3. 然后,您可以通过计算得出长度,直到达到NULL

    也许还有其他类似的策略。

    然而,仅从指针本身,您无法导出其中的元素数量。