/*
*文件名:to_sort
*功能 :实现对数组的排序
*
*/
#include<stdio.h>
#define GET_ARRAY_LEN(array,len){len = (sizeof(array) / sizeof(array[0]));}
void swap(int *n1p,int *n2p);
/*
*name : selection_sort
*function : sortting an array
*post : int array[] size of the array
*/
void selection_sort(int array[])
{
int n; /* length of array */
int i,j, //循环变量
min; //最小数的下标
GET_ARRAY_LEN(array,n);
printf("\n %d \n",n);
for(i=0;i<=n-1;i++)
{
min = i;
for(j=i;j<=n-1;j++)
{
if(array[j]<array[min])
min=j;
}
if(i != min)
swap(&array[i],&array[min]);
}
}
/*
*name : swap
*function : swap two numbers
*post : To exchange data pointer
*/
void
swap(int *n1p,int *n2p)
{
int k;
k = *n1p;
*n1p = *n2p;
*n2p = k;
}
在这个程序中利用宏定义
#define GET_ARRAY_LEN(array,len){len = (sizeof(array) / sizeof(array[0]));}
求数组的长度,但是得到的值是1;
如果是在#include<stdio.h>
#define GET_ARRAY_LEN(array,len){len = (sizeof(array) / sizeof(array[0]));}
void swap(int *n1p,int *n2p);
void
main()
{
int array[]={1,2,3,4,5};
int i,j,n;
i = 5 ;
j = 15 ;
GET_ARRAY_LEN(array,n);
printf("\n %d \n",n);
}
这个函数中则可以正常显示,谁能帮忙分析下,谢谢啦
int array[]={1,2,3,4,5};
int n;
int *a=array;
GET_ARRAY_LEN(a,n);
printf("\n %d \n",n);
其结果也是1. 和数组参数传进函数时的原理是一样的。追问
那有什么方法通过传参数的形式求长度吗?就像我写的那样,只需要一个数组的形参而不需要再输入数组的长度,这样调用起来的话会比较方便
追答好像不能吧