我想知道如何在此程序中计算数组的长度?

时间:2019-08-22 12:45:12

标签: c arrays

为什么使用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;  
}

4 个答案:

答案 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的声明中使用-编译器可能会向您抛出错误。