gpt4 book ai didi

c - C 中动态分配数组的数组元素数

转载 作者:行者123 更新时间:2023-11-30 15:14:09 26 4
gpt4 key购买 nike

我在查找动态分配数组中的数组元素数量时遇到问题。如果我有一个普通的数组,我知道如何找出其中有多少元素:

int array[] = {1,2,3};

printf("Number of array elements: %i\n",(int)(sizeof(array) / sizeof((array)[0])));

这打印了我:

Number of array elements: 3

但是当我想动态分配一个数组并知道它的大小时,我无法让它以同样的方式工作:

int *数组;

array = malloc(3*sizeof(int));
printf("Number of array elements: %i\n",(int)(sizeof(array) / sizeof((array)[0])));

这总是给我:

Number of array elements: 2

无论我分配的大小有多大,它总是会打印

2

请问有人可以帮忙吗?

最佳答案

您看到不同大小的原因是因为底层数据不同。

在第一个示例中,您静态编译了整数数组。该数组元素在内存中全部对齐,并且数组数组。使用 sizeof(array) 可以获取该数组的总体大小。

在第二个示例中,您在整数数组上有一个动态分配的指针。这和内存中完全不一样。实际上,array 变量并不是数组。它是指向第一个元素的指针。此处使用 sizeof(array) 返回第一个元素上指针的大小,因此为 8。

关于c - C 中动态分配数组的数组元素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34165326/

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