我怎么知道数组中的元素数量

how can i know the number of elements in array

本文关键字:元素 数组 我怎么知道      更新时间:2023-10-16

我运行以下代码,但它一直打印"4"

为什么它打印"4"而不是"12"? 我可以使用malloc然后使用sizeof吗?(如果可以的话,那么如何)

#include<stdio.h>
int main()
{
    int arr1[3]={1,2,3};
    int *arr2=arr1,i;
    printf("%d",sizeof(arr2));
    return 0;
} 
指针

不是数组arr2 是指向 int 的指针。 sizeof(arr2)将返回指针的大小。要打印数组的大小,sizeof的操作数必须是数组类型:

printf("%u",sizeof(arr1));  

我可以使用malloc然后sizeof吗?

不。没有便携式方法来找出错误块的大小。 malloc返回指向已分配内存的指针。 sizeof该指针将返回指针本身的大小。但您应该注意,当您动态分配内存时,无需使用sizeof。在这种情况下,您已经知道数组的大小。(如果是char数组,请使用strlen)。

延伸阅读:c-FAQ:为什么sizeof不告诉我指针指向的内存块的大小?

sizeof(arr2)

将打印指针的大小,因为它是int*.但是,如果您尝试 sizeof(arr1) ,它会打印

sizeof(element_type) * array_size

数组的大小。请记住,它没有考虑数组中有多少元素。它只考虑数组可以存储多少个元素。

arr2是一个指针,您正在打印sizeof(pointer)

sizeof(arr1) 会给你 sizeof 数组,可能会给你 12。(假设您的整数是 4 个字节)

它打印 4 是因为 arr2 是一个指针,在 32 位架构中指针的大小为 4 个字节。你无法知道一个动态分配的数组(用malloc分配的数组)的大小,只要有一个指向它的指针。