做一个数组的排序,不知道这样写有什么问题,代码如下。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 是错误的。函数的形参必须增加数组的长度值。
形参取不到数组的字节长度,把数组长度当做参数传入即可。