如何得到指针指向的数组的长度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何得到指针指向的数组的长度相关的知识,希望对你有一定的参考价值。
用指针指向一个动态数组,如何得到这个动态分配的数组的长度
例如:
int *p= new int[30];
如何判断动态数组p的长度,假如30不可以访问到。比如,p在其他类中分配。在当前类如何知道p指向的数组的长度
理解为分配区域的前面四个字节,谢谢,tanyuguo,是存在分配区域前面的,但不是4个字节
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
int *p = new int [30];
long len=0;
int *t = p-4;
for(int i=0 ; i<30; i++)*(p++)=0;
memcpy(&len,t,sizeof(long));
printf("%d", len);
return 0;
输出的是120
wanfustudio 说得也对
#include "stdafx.h"
#include <malloc.h>
int main(int argc, char* argv[])
int *p = new int [30];
size_t len=_msize(p);
printf("%d", len);
return 0;
输出的是120
也谢谢AlphaBlend的getsize函数,但是好像有点问题,我帮你修改了一下
template <class T> T getsize(T* p)
p-=4;
return *p;
int main(int argc, char* argv[])
int *p = new int [30];
int len=getsize(p);
printf("%d",len);
return 0;
输出120
最后谢谢各位! 这个问题圆满解决了
你们投票吧
1 、定义数组,要给定其长度,也可以用Type a[ ] = …… 的方式。
在对数组进行操作时,可能需要计算数组长度,方法是:sizeof(数组名)/sizeof(元素类型)
2、指针指向的字符数组长度的获取方法,不能用sizeof,因为用sizeof(指针),得到指针长度为4
应该用strlen()函数。
#include <iostream.h>#include <string.h>
int num(char *ptr)
int bb = strlen(ptr);
return bb;
int main()
char *p= new char[100];
p = "string";
int b = num(p);
cout<<b<<endl;
return 0;
参考技术A c++ new 分配内存 以后,地址前4字节里存放的就是分配内存块的大小信息
函数 int getsize(int *p)就从这里获取数组长度
int *p = new int[100];
getsize(p);
int getsize(int *p)
int n;
n=(int)p;
n-=4;
int *ptr;
ptr=(int *)n;
n=*ptr;
return (n - 6) / 4;
参考技术B 没法知道.不过VC里面好像会在这块内存空间前划4个字节出来,用来存放后面空间的大小本回答被提问者采纳 参考技术C 仅通过指针是无法获取它指向的数组的大小的。 参考技术D _msize
Returns the size of a memory block allocated in the heap.
size_t _msize( void *memblock );
Routine Required Header Compatibility
_msize <malloc.h>
以上是关于如何得到指针指向的数组的长度的主要内容,如果未能解决你的问题,请参考以下文章