C中的数组元素数 - 代码日志

C中的数组元素数

假设我有一个数组arr。以下什么时候不给数组的元素数:sizeof(arr)/ sizeof(arr [0])?

我只能做一件事情:数组包含不同类型的数组类型的元素。

我是对的,在那里(我几乎是积极的一定是)其他这样的情况?

对不起,这个微不足道的问题,我是一个Java开发人员,我对C来说比较新。

谢谢!

Let’s say I have an array arr. When
would the following not give the
number of elements of the array:
sizeof(arr) / sizeof(arr[0])?

有一件事我经常看到新的程序员这样做:

void f(Sample *arr)
{
   int count = sizeof(arr)/sizeof(arr[0]); //what would be count? 10?
}

Sample arr[10];
f(arr);

所以新的程序员认为count的值将是10.但是这是错误的。

即使这是错误的:

void g(Sample arr[]) //even more deceptive form!
{
   int count = sizeof(arr)/sizeof(arr[0]); //count would not be 10  
}

这一切都是因为一旦将数组传递给任何这些函数,它就成为指针类型,因此sizeof(arr)将给出指针的大小,而不是数组!

编辑:

以下是一个优雅的方式,您可以将数组传递给一个函数,而不会使其衰减为指针类型:

template<size_t N>
void h(Sample (&arr)[N])
{
    size_t count = N; //N is 10, so would be count!
    //you can even do this now:
    //size_t count = sizeof(arr)/sizeof(arr[0]);  it'll return 10!
}
Sample arr[10];
h(arr); //pass : same as before!
http://stackoverflow.com/questions/4839626/element-count-of-an-array-in-c

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:C中的数组元素数