C 程序如何确定数组的大小?

问题描述 投票:0回答:1

因为“数组”或数组名称只是一个指向数据块“起点”的指针,所以 sizeof 运算符如何返回数组的大小?我知道这是在运行时确定的。

int arr[10]; //分配足够的内存来存储10个int,并使arr成为指向首地址的指针。

出现这个问题是因为我们无法使用运算符确定 malloc 内存块的大小。我的理解是,除了堆的使用之外,“普通”数组与 malloc 内存相同。

我无法理解为什么非堆数组和堆数组的行为不同。

arrays c malloc sizeof
1个回答
0
投票

当您将数组声明为

type name[count]
时,它会根据上下文在分配的空间中进行转换,并且
name
的值被分配为该字节块的首地址。例如,全局声明的
int32_t V[10]
被转换为 40 字节以在动态内存中分配,而在函数内部则被转换为 40 字节以在调用函数时保留在堆中。 运算符
sizeof
在编译时进行评估,因此编译器能够识别所需使用的空间,并且
sizeof(V)
返回
40
。 当您将指针声明为
type *name
时,编译时已知的唯一信息是分配用于保存其指向的地址的 sizeof(void *) 字节,因此编译器无法知道该变量的范围,它可以只是存储特定地址而不是指固定大小的内存。

© www.soinside.com 2019 - 2024. All rights reserved.