gpt4 book ai didi

c - 在 C 中获取数组大小。无法理解输出

转载 作者:行者123 更新时间:2023-11-30 16:09:42 24 4
gpt4 key购买 nike

我很好奇为什么我的代码中会出现以下行为。

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{
int M=24;
int arr[M];
int N=24;
int* ptr=(int*) malloc(sizeof(int)*N); /*Allocate memory of size N */

printf("Size of your malloced array is %lu\n",sizeof(ptr)/sizeof(ptr[0])); /* Get the size of memory alloctaed. Should be the same as N?*/

printf ("Size of your normal arrays is %lu\n",sizeof(arr)/sizeof(arr[0])); /* Ditto */

free(ptr);

return 0;
}

输出为

Size of your malloced array is 2
Size of your normal arrays is 24

我原以为这两个地方的输出都是24。如果不知何故我“忘记”了它,那么如何获得 malloced 数组的大小呢?

当然,指针ptr将包含一些有关已分配数组大小的信息,因为当我们调用free(ptr)时,它将释放刚刚分配的数组

最佳答案

当您对指针使用sizeof()时,您将获得指针的大小。不是分配的数组的大小。在你的例子中,一个指针可能是 8 个字节,一个 int 是 4 个字节,因此你得到 2 个字节。

简而言之,您无法获取已分配数组的大小。您需要自己跟踪它。

<小时/>

编辑:请注意,某些编译器实际上支持此功能作为扩展:

例如,MSVC 支持 _msize():http://msdn.microsoft.com/en-us/library/z2s077bc.aspx

关于c - 在 C 中获取数组大小。无法理解输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59061288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com