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

Count elements of array via pointers in other array

我试图通过使用数组 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

我可以通过 x 获取数组 a 的最终位置的值没问题:

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

但是现在,我想通过 x 计算 a 的元素,但似乎无法计算出来:

//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

如果您有权访问 x 而无法访问 a,则无法对 a 的元素进行计数。当 ax 中时,它只是一个指针;关于它在数组中的信息不再对编译器可用。

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

size_t len[] = {count_elements_a, count_elements_b};

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