2015-08-21 51 views
2

如果我提到如何知道C中数组中元素的确切个数?

int ar[100]={1,1}; 

,我想知道的元素存在于它,而不是它的大小多少,什么命令我应该使用?

+1

其余98号以0填充。如果需要,可以使用循环来计算非零值。 – user3528438

+1

@ user3528438不一定。有可能是在那里 – asdf

+2

@asdf http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c – user3528438

回答

7

数组的情况下,大小总是元素的数量乘以每个元素的大小。一旦定义它们,它们都不会变化(元素的数量或大小)。

如果你的意思是,找出有意义(给你)数组中存在的元素,那么,你需要有一个sentinel value地方(由此标记有效数据项的末尾),并使用一个循环,你需要自己计算有效元素。

+0

在'strlen()'的情况下,标记值是'\ 0'字节 – Jack

1

你应该实现某种计数器来跟踪当前的元素数量为你添加。有为每个元素分配的内存,因此几乎不可能尝试找出有多少内存插槽已填满。

2
int array[3] = {1,2}; //1,2,0 

由于默认将数组元素初始化为0,因此可以将非零值计为元素数。

但是,考虑

int array[4] = {0,1,2}; //0,1,2,0 

你需要一种方法来确定哪些零点是有意义的。可能最后的零是无用的。

但考虑

int array[4] = {0,1,0}; //0,1,0,0 

的0在array[2]是故意的。不同的球赛。这一切都取决于你确定哪些零。

1

只要不放弃它的大小,如:

int foo[]={1,2,3,4,5}; 

那么编译器将分配foo刚刚足以容纳值在初始化列表中,所以当你sizeof(foo)/sizeof(foo[0])它会做你想要什么,只要数组不衰减到指针。与硬编码100相比,它实际上可以节省大量内存。

相关问题