如何得到指针指向的数组的长度

来源:百度知道 编辑:UC知道 时间:2024/06/17 03:13:17
用指针指向一个动态数组,如何得到这个动态分配的数组的长度
例如:
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* arg

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;
}

仅通过指针是无法获取它指向的数组的大小的。

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";
&n