我试图通过在数组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
答案 0 :(得分:4)
如果您有a
的访问权限且无法访问x
,则无法计算a
的元素。当a
位于x
时,它只是一个指针;编译器不再提供有关它在数组中的信息。
在这种情况下,常见的技巧是使用单独的长度数组:
size_t len[] = {count_elements_a, count_elements_b};
当然这只适用于内置数组。 C ++标准库提供了std::vector
容器,它允许您通过调用成员函数来查找数组大小。