如何使用指针确定数组的长度?

时间:2018-02-17 14:06:40

标签: c arrays

将指向数组的指针作为C语言函数的参数,如何找到它的长度?

int* mymap(int (*func)(int), int* Array) {
    int size = sizeof(Array); 
    // giving 8 (which is size of int*),but I want length of the array which I gave is 5.
    int* B = (int*) malloc(sizeof(int)*size);
    printf("size %d\n", size);
    for (int i = 0; i < size; ++i)
    {
        B[i] = func(Array[i]);
    }
    return B;
}

1 个答案:

答案 0 :(得分:3)

你做不到。 sizeof以您期望的方式对数组起作用 - 返回数组的大小。即使你传递的数组将被转换为指向第一个元素的指针(称为数组衰减),所以基本上你没有在数组上使用sizeof - 而是在它的衰变指针上。因此,当您将它与sizeof运算符一起使用时,它会为您提供sizeof指针而不是数组的大小。解决方案是将长度作为参数传递给函数。

int array[] = {1, 2, 3};
size_t size = sizeof array / sizeof array[0];

..
f(array, size);