如何获得在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);
请注意, sizeof
以char
为单位给出了大小,这就是为什么需要根据sizeof (int)
进行划分的原因,否则你会得到太高的价值。
还要注意,作为一个兴趣点和清洁度, sizeof
不是一个函数。 只有当参数是一个types名称时才需要括号,因为参数是一个类似于types的expression式(例如sizeof (int)
)。 你通常可以不用命名实际的types,而是通过对数据进行sizeof
来代替。
show()获取存储在2个字节的数组的地址。 把它想成int * ar。
这就是为什么在编写一个带有数组的函数时,声明两个参数的原因。 一个是指向数组的指针,另一个指定数组的大小。