我有一个结构的双指针数组:
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]);
答案 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_back
或resize
分配一些内存),您可以使用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)
只有指向某个内存块的指针,您无法推迟该内存块的大小。所以你不能推迟其中的元素数量。
但是,对于指针数组,您可以在以下条件下推断出其中的元素数量:
foo
。然后,您可以通过计算得出长度,直到达到NULL
。
也许还有其他类似的策略。
然而,仅从指针本身,您无法导出其中的元素数量。