c语言数组排序问题,为啥出错了?

做一个数组的排序,不知道这样写有什么问题,代码如下。length放在主函数里面定义就可以正常运行,放在函数里定义就不行了,求帮忙解释下原因。

#include<stdio.h>
void select(int array[]);
int main()
{
        int array[]={3,55,23,13,5,88,57,95,28,23,56};
        select(array);
        return 0;
}
void select(int array[])
{
        int length = sizeof(array)/sizeof(array[0]);
        int i,j;
        int temp;
        for(i = 0; i < length; i++)
        {
                for(j = i; j < length-1;j++)
                {
                        if(array[i]>array[j+1])
                        {
                                temp = array[j+1];
                               array[j+1] = array[i];
                                array[i] = temp;
                        }
                }
                printf("%d ",array[i]);
        }
        printf("\n%d",length);
}

ntitled-1.c: In function 'select':
Untitled-1.c:11:28: warning: 'sizeof' on array function parameter 'array' will return size of 'int *' [-Wsizeof-array-argument]
   11 |         int length = sizeof(array)/sizeof(array[0]);
      |                            ^
Untitled-1.c:9:17: note: declared here
    9 | void select(int array[])
      |             ~~~~^~~~~~~
3 55 
2

void select(int array[]) 数组名 array 作为形参,在函数里退化为指针,所以 int length = sizeof(array)/sizeof(array[0]); 得到的 length =1 是错误的。函数的形参必须增加数组的长度值。

形参取不到数组的字节长度,把数组长度当做参数传入即可。