【发布时间】:2016-03-13 18:08:10
【问题描述】:
您好,我正在尝试编写一个函数,它返回作为参数传递的数组元素的数量,该函数必须适用于任何类型的数组。
我试过这个:
int nb_elems(void* array)
{
void* end = array;
while(*end != NULL) // The last element have to be null, it is not counted.
end++;
return end - array;
}
如您所料,它不起作用。
事实上它甚至没有编译,我得到了这些错误:
错误:非法间接。
错误:void *:大小未知。
错误:void *:大小未知。
首先,你能告诉我我想做的事情是否可行?
其次,我试图实现这一目标的方式是否有意义,还是我完全没有抓住重点?
那么,为什么会出现这些错误,它们是什么意思?
感谢您的帮助!
【问题讨论】:
-
C 没有传递数组,
nb_elems(void* array)收到了一个指针。 void *pointer 不知道它指向多少个元素(也不知道类型)。 -
我不确定你想做的事情是否可行。为了让您的函数计算数组中元素的数量,它必须有一种方法知道数组是什么类型,因为这是 C 编译器必须知道每个元素从哪里开始以及下一个元素在哪里结束的唯一方法。
-
这是不可能的函数,但你可以使用宏,如果你确定你有一个数组而不仅仅是一个指针:stackoverflow.com/questions/37538/…
-
我认为一种方法是使用引用机制调用,首先将数组的基地址存储在指针中并将其发送给函数,然后继续计数元素直到空字符在指针的帮助下访问必须计算长度的数组的值。