如何获得在C中的数组的长度? 是“sizeof”是解决scheme之一吗?

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

看到下面的代码,并build议我使用这样的“ 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)); } 

但是输出是这样的:

输出是:

长度:10

长度:5

长度:2

长度:1

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

build议我如果有人知道。

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

您必须添加一个明确的参数:

 void show(int *data, size_t count); 

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

 int arr[] = { 1,2,3,4,5 }; show(arr, sizeof arr / sizeof *arr); 

请注意, sizeofchar为单位给出了大小,这就是为什么需要根据sizeof (int)进行划分的原因,否则你会得到太高的价值。

还要注意,作为一个兴趣点和清洁度, sizeof 不是一个函数。 只有当参数是一个types名称时才需要括号,因为参数是一个类似于types的expression式(例如sizeof (int) )。 你通常可以不用命名实际的types,而是通过对数据进行sizeof来代替。

show()获取存储在2个字节的数组的地址。 把它想成int * ar。

这就是为什么在编写一个带有数组的函数时,声明两个参数的原因。 一个是指向数组的指针,另一个指定数组的大小。