查找指针指向的数组的大小[重复]
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/… @mehmalloc_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
调用),并且显然一些实现提供了返回此信息的函数,据我所知没有实现- 独立且可移植的方式,无需自己处理。
【讨论】:
以上是关于查找指针指向的数组的大小[重复]的主要内容,如果未能解决你的问题,请参考以下文章