【问题标题】:how can i know the number of elements in array [duplicate]我怎么知道数组中元素的数量[重复]
【发布时间】:2015-02-22 16:28:48
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

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

我可以使用malloc 然后sizeof 吗?

没有。没有可移植的方法来找出 malloc'ed 块的大小。 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?

【讨论】:

    【解决方案2】:
    sizeof(arr2)
    

    将打印指针的大小,因为它是int*。然而,如果你尝试sizeof(arr1),它会打印出来

    sizeof(element_type) * array_size
    

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        它打印 4 因为arr2 是一个指针,并且指针的大小在 32 位架构中是 4 个字节。仅给出指向动态分配的数组(使用 malloc 分配的数组)的指针,您无法知道它的大小。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多