通过其他数组中的指针计算数组元素
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
的元素进行计数。当 a
在 x
中时,它只是一个指针;关于它在数组中的信息不再对编译器可用。
在这种情况下的一个常见技巧是使用单独的长度数组:
size_t len[] = {count_elements_a, count_elements_b};
当然这只适用于内置数组。 C++ 标准库提供了 std::vector
容器,让您可以通过调用成员函数来找出数组大小。
我试图通过使用数组 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
的元素进行计数。当 a
在 x
中时,它只是一个指针;关于它在数组中的信息不再对编译器可用。
在这种情况下的一个常见技巧是使用单独的长度数组:
size_t len[] = {count_elements_a, count_elements_b};
当然这只适用于内置数组。 C++ 标准库提供了 std::vector
容器,让您可以通过调用成员函数来找出数组大小。