查找指针指向的数组的大小[重复]

Posted

技术标签:

【中文标题】查找指针指向的数组的大小[重复]【英文标题】: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 找到整个数组的大小

【问题讨论】:

可能是***.com/a/492410/1758762的副本 另一个相关且有趣的问题是:***.com/questions/2034450/… @meh malloc_size() 怎么样? “不可能”在编程中很少是一个好的答案。 @H2CO3 - 同意。另外,这就是为什么我在评论中写了这个,而不是答案。 【参考方案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 调用),并且显然一些实现提供了返回此信息的函数,据我所知没有实现- 独立且可移植的方式,无需自己处理。

【讨论】:

以上是关于查找指针指向的数组的大小[重复]的主要内容,如果未能解决你的问题,请参考以下文章

指向整个数组的C ++指针[重复]

存储指向二维数组的指针[重复]

如何在构造函数中初始化指向字符串的指针数组[重复]

c ++动态指针数组[重复]

如何在不知道c中大小的情况下遍历数组[重复]

我不明白数组名称是如何指向数组[重复]