通过其他数组中的指针计算数组的元素

时间:2015-01-15 13:46:41

标签: c++ arrays sizeof

我试图通过在数组x中使用它们的引用来计算数组a或b中的元素。到目前为止,这就是我所拥有的:

int a[]={1,2,3,4,5};
int b[]={0,2,4,5};

int* x[]={a,b};

//These work as expected
int count_elements_a= sizeof(a)/sizeof(int); // returns 5
int count_elements_b= sizeof(b)/sizeof(int); // returns 4
int count_elements_x= sizeof(*x)/sizeof(int); // returns 2

我可以得到数组的最终位置的值a via x没问题:

int a2 = x[0][2]; // returns 3

但是现在,我想计算a的元素,来自x并且似乎无法弄明白:

//Count elements of a, via x. Should return 5.
int count_elements_ax= sizeof(*x[0])/sizeof(int); // returns 1
int count_elements_ax1= sizeof(x[0])/sizeof(int); // returns 2

1 个答案:

答案 0 :(得分:4)

如果您有a的访问权限且无法访问x,则无法计算a的元素。当a位于x时,它只是一个指针;编译器不再提供有关它在数组中的信息。

在这种情况下,常见的技巧是使用单独的长度数组:

size_t len[] = {count_elements_a, count_elements_b};

当然这只适用于内置数组。 C ++标准库提供了std::vector容器,它允许您通过调用成员函数来查找数组大小。