假设我有以下c
功能:
int MyFunction( const float arr[] )
{
// define a variable to hold the number of items in 'arr'
int numItems = ...;
// do something here, then return...
return 1
}
如何进入numItems
数组arr
中的项目数量?
答案 0 :(得分:11)
不幸的是你无法得到它。在C中,以下2是等效声明。
int MyFunction( const float arr[] );
int MyFunction( const float* arr );
您必须自行传递大小。
int MyFunction( const float* arr, int nSize );
如果char
指针指定字符串,则char数组的长度由分隔符'\0'
确定。
答案 1 :(得分:5)
要么传递另一个参数中的元素数量,要么对数组中的分隔元素有一些约定。
答案 2 :(得分:5)
我最初建议:
int numItems = sizeof(arr)/sizeof(float);
But it will not work,因为arr
未在当前上下文中定义,并且它被解释为一个简单的指针。 因此,在这种情况下,您必须将元素数量作为参数。否则建议的陈述将在以下背景下起作用:
int MyFunction()
{
float arr[10];
int numItems = sizeof(arr)/sizeof(float);
return numItems;// returns 10
}
答案 3 :(得分:2)
你做不到。该号码必须单独传递给MyFunction
。因此,向MyFunction添加第二个参数,该参数应包含大小。
答案 4 :(得分:2)
正如我在评论中所说,将其作为另一个论点传递似乎只是解决方案。否则,您可以使用全局定义的约定。
答案 5 :(得分:1)
除非您有一些预定格式的数组,否则这是不可能的。因为可能有任何数量的浮点数。使用const float arr[]
,您只需将数组的基址传递给类型为float []
的函数,该函数无法修改。因此,您可以为任何arr[n]
执行n
。
答案 6 :(得分:1)
优于
int numItems = sizeof(arr)/sizeof(float);
是
int numItems = sizeof(arr)/sizeof(*arr);