2015-01-15 63 views
1

我想通过使用它们在数组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没有问题得到阵列的最终位置的值:

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

但现在,我想算的元素,通过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 
+3

为什么把自己置身于这一切?例如,你可以不使用'std :: vector',只使用'.size()'? – CoryKramer

+4

总之,你不能。当'a'和'b'在'x'初始化过程中指针衰减时,这些信息就会丢失。 – BoBTFish

+1

想一想。什么是'x [0]'的类型?它是'int *'。对于给定的程序,'sizeof(int *)'只能是一件事。 – juanchopanza

回答

4

没有办法,如果你有机会到xa没有进入统计的a元素。到ax时,它只是一个指针;关于它在数组中的信息不再可供编译器使用。

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

size_t len[] = {count_elements_a, count_elements_b}; 

这仅适用于内置阵列。 C++标准库提供了std::vector容器,可以通过调用成员函数来查找数组大小。