【问题标题】:Find size of array pointed to by pointer [duplicate]查找指针指向的数组的大小[重复]
【发布时间】:2013-01-25 14:39:18
【问题描述】:

我有以下代码:

int* d = (int*) malloc(100 * sizeof(int));
cout<<"size of d which is pointer is: " << sizeof(d)<<endl;

我知道 sizeof 输出 4 因为 d 是一个 ptr。但是,如何使用 sizeof 找到整个数组的大小

【问题讨论】:

标签: c++


【解决方案1】:

你不能 - sizeof 是编译时操作,因此不是动态的。

当您使用 c++ 时,请改用 std::vector。否则创建一个结构来存储数组的指针和大小。改为传递它。

【讨论】:

    【解决方案2】:

    指针为您提供了内存中存储数据的位置,这就是为什么您不能仅从该信息中获取它的大小。

    这类似于通过知道我的地址来知道我的房子有多大(无需事先了解或使用 Google 地图等工具)

    【讨论】:

      【解决方案3】:

      直接回答。不,你不能,但你可以试试这个:

      int x[]={1,2,3,4};
      int *ptr=x;
      decltype(sizeof(*ptr)) size=0;
      while(*ptr<5){
                size =size+sizeof(*ptr);
                ptr++;
                }
                cout<<"Size is : "<<size;
      

      输出:

      Size is:16

      【讨论】:

        【解决方案4】:

        您可能会争辩说您已经使用 sizeof 知道整个数组的大小 - 您已经在最初的 malloc 调用 - 100 * sizeof(int) 中得到了它。尽管malloc 机器必须知道与内部指针关联的内存量(它需要它来进行相应的free 调用),并且显然一些实现提供了返回此信息的函数,据我所知没有实现- 独立且可移植的方式,无需自己处理。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-07-08
          • 2012-11-13
          • 2022-01-02
          • 2014-07-22
          • 1970-01-01
          • 2012-11-17
          • 1970-01-01
          相关资源
          最近更新 更多