使用指针知道数组的大小

如何使用malloc分配的指针知道数组的大小?

#include  int main(){ int *ptr = (int *)malloc(sizeof(int * 10)); printf("Size:%d",sizeof(ptr)); free(ptr_one); return 0; } 

在这种情况下,我只得到指针的大小,即8.如何修改代码以获得40的数组大小。

你不能。
您需要进行簿记并自行跟踪。 使用new您可以分配动态内存,在释放内存时,您只需调用delete ,它知道它已释放多少内存,因为语言在内部负责处理,因此用户无需担心簿记。 如果你仍然明确需要它,那么你需要通过单独的变量来跟踪它。

如果您的机器是32位,您将获得指针大小始终为任何数据类型的4个字节

如果您的机器是64位,您将获得指针大小始终为任何数据类型的8个字节

如果声明静态数组,则可以使用sizeof获得大小

 int a[10]; printf("Size:%lu",sizeof(a)); 

但是你没有得到被指针阻挡的数组的大小。 使用malloc动态分配块的内存。

看下面的代码:

 #include  #include int main() { int i; int *ptr = (int *)malloc(sizeof(int) * 10); // printf("Size:%lu",sizeof(ptr)); // In the above case sizeof operater returns size of pointer only. for(i=1;ptr && i<13 ;i++,ptr++) { printf("Size:%d %p\n",((int)sizeof(i))*i,ptr); } return 0; } 

输出:

 Size:4 0x8ec010 Size:8 0x8ec014 Size:12 0x8ec018 Size:16 0x8ec01c Size:20 0x8ec020 Size:24 0x8ec024 Size:28 0x8ec028 Size:32 0x8ec02c Size:36 0x8ec030 Size:40 0x8ec034 //after this there is no indication that block ends. Size:44 0x8ec038 Size:48 0x8ec03c