如何在C中获取数组的长度?"sizeof"是一个解决方案吗?

ali*_*786 42 c

可能重复:
C编程语言中数组的大小?
为什么C-Array在传递给函数时有一个错误的sizeof()值?

请参阅下面的代码并建议我使用" 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));
}
Run Code Online (Sandbox Code Playgroud)

但输出是这样的:

输出是:

长度:10

长度:5

长度:2

长度:1

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

建议我如果有人知道.

unw*_*ind 63

数组在函数调用中衰减为指针.无法计算仅以任何方式表示为指针的数组的大小,包括使用sizeof.

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

void show(int *data, size_t count);
Run Code Online (Sandbox Code Playgroud)

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

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

show(arr, sizeof arr / sizeof *arr);
Run Code Online (Sandbox Code Playgroud)

请注意,sizeof为您提供以单位为单位的大小char,这就是为什么需要除以基本sizeof (int)需求,或者您获得的价值太高的原因.

另外请注意,兴趣和清洁度点,这sizeof不是 一个功能.仅当参数是类型名称时才需要括号,因为参数则是类似强制转换的表达式(例如sizeof (int)).通过sizeof对数据进行操作,您通常可以在不命名实际类型的情况下离开.

  • show(arr,sizeof arr/sizeof*arr); (2认同)

归档时间:

查看次数:

216103 次

最近记录:

8 年,4 月 前