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

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>

以上是关于如何得到指针指向的数组的长度的主要内容,如果未能解决你的问题,请参考以下文章

指针和数组

c语言如何输出指针所指向的值

得到数组的最后一个数的趣味实现

数组名作函数参数时,实参与形参变量之间的数据传递是?

学以致用一:得到数组的最后一个元素。

指向不同类函数的函数指针数组