如何获得一个输出,告诉我该数组中有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
。
答案 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>