如何获取数组的长度在C?是“sizeof”是解决方案之一吗? [重复]

Possible Duplicate:
07000
07001

看下面的代码,并建议我,“sizeof”关键字的区别是什么,当我使用像这样:

#include<stdio.h>
#include<conio.h>
void show(int ar[]);
void main()
{
    int arr[]={1,2,3,4,5};
    clrscr();
    printf("Length: %d\n",sizeof(arr));
    printf("Length: %d\n",sizeof(arr)/sizeof(int));
    show(arr);
    getch();
}
void show(int ar[])
{
   printf("Length: %d", sizeof(ar));
   printf("Length: %d", sizeof(ar)/sizeof(int));
}

但输出是这样的:

Output is:

Length: 10

Length: 5

Length: 2

Length: 1

为什么我会这样;如果我想把整个数据从一个数组到另一个数组,我该怎么办?

建议我如果有人知道。

数组衰减到函数调用中的指针。不可能计算一个数组的大小,它只能以任何方式表示为指针,包括使用sizeof。

您必须添加一个显式参数:

void show(int *data, size_t count);

在调用中,可以使用sizeof计算实际数组的元素数:

int arr[] = { 1,2,3,4,5 };

show(arr, sizeof arr / sizeof *arr);

注意sizeof给你的大小以char为单位,这就是为什么需要除以基本上sizeof(int),或者你会得到一个太高的价值。

还要注意,作为一个兴趣和清洁,该sizeof不是一个函数。只有当参数是类型名称时,才需要括号,因为参数是类似转换的表达式(例如sizeof(int))。你经常可以逃避而不命名实际类型,通过对数据做sizeof。

http://stackoverflow.com/questions/9413046/how-to-get-the-length-of-array-in-c-is-sizeof-is-one-of-the-solution

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何获取数组的长度在C?是“sizeof”是解决方案之一吗? [重复]