c - 如何找到数组的大小(从指向数组第一个元素的指针)?

标签 c arrays pointers sizeof

首先,这是一些代码:

int main() 
{
    int days[] = {1,2,3,4,5};
    int *ptr = days;
    printf("%u\n", sizeof(days));
    printf("%u\n", sizeof(ptr));

    return 0;
}

有没有办法找出ptr指向的数组的大小(而不是仅仅给出它的大小,在32位系统上是四个字节)?

最佳答案

不,你不能。编译器不知道指针指向什么。有一些技巧,比如用已知的带外值结束数组,然后计算大小直到该值,但这不是使用 sizeof()

另一个技巧是 Zan 提到的。 ,即将大小隐藏在某个地方。例如,如果您要动态分配数组,请分配一个比您需要的大 1 个 int 的 block ,将大小存储在第一个 int 中,然后返回 ptr+1 作为指向数组的指针。当您需要大小时,递减指针并查看隐藏的值。请记住从头开始释放整个 block ,而不仅仅是数组。

关于c - 如何找到数组的大小(从指向数组第一个元素的指针)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34442500/

相关文章:

c - 如何在 C 中对 int* 指针使用 free 函数

c# - 如何创建一个非重复随机数数组

c - 在函数之间传递多维数组

c - C 代码的缓冲区溢出错误

通过 go 模块的内存地址从 .so 文件调用 C 函数。 (cgo)

c - 原因 main-C 不是 const

c++ - 为什么 cmake 在 64 位系统上查找 32 位库而不是 64 位库?

c - 在不覆盖指针指向的值的情况下取消 C 中结构数组的索引

php - MongoDB 从集合中提取数组元素

C++ <type>*& 类函数或结构错误