对于冒泡排序的存储有以下问题:
#include <stdio.h>
#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof((arr)[0])) //添加这样一句话使用宏定义数组大小
void sort( float a[],int n )
{
int i,j;
float t;
for(i=0; i<n-1;i++)
{
for(j=0; j<n-i-1 ;j++)
if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1] ; a[j+1]=t; }
}
}
int main()
{
float a[7]={2,6,3,8,3,12,9};
int i;
int n=ARRAY_SIZE(a);
sort(a,n);
for(i=0;i<7;i++)
printf("%.0f ",a[i]);
printf("\n");
return 0;
}
如果使用学生的方法:在函数内部使用,实参传递的时候,数组作为参数传递给函数时,它会退化成指针。因此sizeof(a) 实际上返回的是指针的大小(通常是4或8字节),而不是整个数组的大小。所以这样会导致n的值不正确,无法执行排序。
以上代码中,仅适用于数组在同一作用域内的情况,即数组未被作为指针传递到函数中。
补充建议:
1.避免在函数内部计算数组大小:数组作为参数传递会退化成指针,无法在函数内部正确计算数组大小。因此,始终建议将数组大小作为额外的参数传递给函数。