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

时间:2014-12-24 15:07:54

标签: c++ c arrays memory-management dynamic

我运行以下代码,但它一直打印“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;
} 

4 个答案:

答案 0 :(得分:8)

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

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

我可以使用malloc然后使用sizeof吗?

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

进一步阅读:c-faq: Why doesn't sizeof tell me the size of the block of memory pointed to by a pointer?

答案 1 :(得分:6)

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

sizeof(arr1)会给你sizeof数组,它可能会给你12.(给定你的整数是4个字节)

答案 2 :(得分:6)

sizeof(arr2)

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

sizeof(element_type) * array_size

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

答案 3 :(得分:3)

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