获取C中动态分配的数组的长度

可能重复:
函数参数中的数组长度

如何在C中获取动态分配的数组的长度?

我试过了:

sizeof(ptr) sizeof(ptr + 100) 

他们没有工作。

你不能。 您必须将长度作为参数传递给您的函数。 指针的大小是包含地址的变量的大小,这是您找到的4(32位地址空间)的原因。

由于malloc只返回一块内存,你可以在块中添加额外信息,告诉数组中有多少元素,如果你不能添加一个告诉数组大小的参数,那就是一种方法

例如

 char* ptr = malloc( sizeof(double) * 10 + sizeof(char) ); *ptr++ = 10; return (double*)ptr; 

假设你可以在PHP中读取数组,这是一种我不熟悉的语言。

在这里你可以看到C的危险:ptr只指向内存,无法知道假设的大小。 你可以增加和增加,操作系统最终可能会抱怨,或者你的程序崩溃,或者破坏其他程序。 你应该总是指定大小,并自己检查边界!

这类似于使用指针跨越INTEGER数组中的所有元素

在这里看到我的答案