为什么使用sizeof(arr1 [0])的除法来计算数组的长度? 无需除以sizeof(arr1 [0])即可简单地对其进行计算。 如果有人知道原因,请解释一下
#include <stdio.h>
int main()
{
//Initialize array
int arr1[] = {1, 2, 3, 4, 5};
//Calculate length of array arr1
int length = sizeof(arr1)/sizeof(arr1[0]);
//Create another array arr2 with the size of arr1.
int arr2[length];
//Copying all elements of one array into another
for (int i = 0; i < length; i++) {
arr2[i] = arr1[i];
}
//Displaying elements of array arr1
printf("Elements of original array: \n");
for (int i = 0; i < length; i++) {
printf("%d ", arr1[i]);
}
printf("\n");
//Displaying elements of array arr2
printf("Elements of new array: \n");
for (int i = 0; i < length; i++) {
printf("%d ", arr2[i]);
}
return 0;
}
答案 0 :(得分:2)
sizeof(arr)
为您提供所有数组的大小(以字节为单位)。
sizeof(arr[0])
为您提供数组中一个元素(第一个元素,所有元素的大小均相同)的字节大小。
因此sizeof(arr1)/sizeof(arr1[0])
为您提供了数组中有多少个元素
答案 1 :(得分:1)
在编程语言C中,运算符sizeof
生成变量或数据类型的大小,以该类型所需的字节数度量。
sizeof(arr1)
这意味着整个数组arr1
的大小(以字节为单位)。
sizeof(arr1[0])
这意味着第一个元素的大小(以字节为单位)。
因此,两者的除法就是数组arr
的长度。 [在元素中]
答案 2 :(得分:0)
sizeof(arr1)
给出整个数组的大小,即5 * sizeof(int)
个字节,如果您想知道数组中的元素数,则需要将其除以持有该数组的元素大小。
您甚至可以
int length = sizeof(arr1)/sizeof(int);
但是,如果数组类型改变了怎么办?
char arr1[] = {1, 2, 3, 4, 5};
您的计算会很费力,否则您最终将在每个要计算长度的位置进行更改。
答案 3 :(得分:0)
sizeof()
将返回您为其指定的参数的字节数。 sizeof(arr1)
将返回数组arr1
的大小,以 bytes 为单位。它不同于元素的数量,通常称为数组 length 。要知道数组的长度,您必须首先知道数组的字节数,然后将其除以每个元素的大小(以字节为单位)(即,您的代码sizeof(arr1)/sizeof(arr1[0])
所做的事情)。
话虽如此,您的代码在int arr2[length];
行中有一个错误。数组的长度必须计算为恒定的自然数。由于length
不代表常量整数,因此不能在arr2
的声明中使用-编译器可能会向您抛出错误。