静态数组中的元素数

时间:2018-08-03 09:09:59

标签: c

如何获得一个输出,告诉我该数组中有56个元素。

static uint16_t test[200] = 
{
    50, 32, 1, 5, 23, 5, 7, 56, 754, 6, 
    243, 23, 5, 5, 6, 35, 35, 67, 3, 5324, 
    51, 24, 23, 4, 2346, 54, 45, 345, 32, 4, 
    234, 12, 5, 43, 656, 37, 563, 6, 542, 543, 
    52, 35, 342, 673, 3, 6, 54, 624, 3, 545, 
    2, 345, 2435, 24, 6, 54
};

如果它不是静态的并且未设置max元素的数量,我尝试了其他可行的方法。喜欢

int count = 0;
uint16_t *p;

for(p = test; p < &test + 1; p++)
    count++;

或者,

sizeof(test) / sizeof(uint16_t);

但是一旦将元素的最大值设置为200,它总是返回200

3 个答案:

答案 0 :(得分:6)

  

如何获得一个输出,告诉我该数组中有56个元素。

static uint16_t test[200] = 50,32,1,5,23,5,7,56,754,6,243,23,5,5,6,35,35,67,3,5324,51,24,23,4,2346,54,45,345,32,4,234,12,5,43,656,37,563,6,542,543,52,35,342,673,3,6,54,624,3,545,2,345,2435,24,6,54};

您不会,因为您的假设是错误的。无论如何,此数组都有200个元素。如果仅初始化其中的前56个,则其他默认初始化的0-它们仍然存在。

也就是说,如果0不被视为“有效”值,则可以简单地算出“有效”值,例如

size_t count;
for (count = 0; test[count]; ++count);

否则,只需将使用地点的实际计数保存在变量中即可。


旁注,您对数组大小的计算

sizeof(test)/sizeof(int)

是错误的,因为类型不匹配。为避免此类错误,请不要在sizeof中使用类型名称,而应始终使用表达式:

sizeof test / sizeof *test

*test的计算结果为第一个元素,其类型为uint16_t,这就是sizeof使用的类型。另请注意,将sizeof与表达式配合使用时,不需要使用括号。

答案 1 :(得分:0)

有2种方法可以将元素存储在数组中

1. Static
2. Dynamic

在静态情况下,我们知道数组中的元素数,因此您可以预定义值。 喜欢

uint16_t test[200]; -- Array to store 200 elements.

在动态情况下,我们不知道数组中元素的数量,因此使用动态内存分配来存储值并保持所添加元素的数量。

答案 2 :(得分:0)

如果未将长度设置为200,则编译器会将其设置为初始化值。

  u_int16_t test[] = {1,4,6};
  int len = sizeof (test) / sizeof (u_int16_t);   // n = 3

如果您需要设置测试的长度,并且您知道最后一个元素不是0(!),那么您可以计算末尾的0,然后减去200。然后您也知道元素的数量。 / p>