C - 数组中的元素数量?

时间:2011-07-28 16:54:28

标签: c

假设我有以下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中的项目数量?

7 个答案:

答案 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);