小编典典

如何找到“sizeof”(指向数组的指针)?

all

首先,这里有一些代码:

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 位系统上是四个字节)?


阅读 72

收藏
2022-03-28

共1个答案

小编典典

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

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

2022-03-28