宏定义求数组长度

/*
*文件名: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);
}
这个函数中则可以正常显示,谁能帮忙分析下,谢谢啦

在数组参数传进函数时传的是数组的首地址,而不是整个数组,因此sizeof(array)时得到的是array[0]的长度,而不是array的长度。这相当于len = (sizeof(array[0]) / sizeof(array[0])),自然是等于1了。因此不能通过传参数的形式求其长度,只能在定义所要求数组长度的函数里求其长度。你在你给的第二个程序中这样改一下,执行后你就知道了:
int array[]={1,2,3,4,5};
int n;
int *a=array;
GET_ARRAY_LEN(a,n);
printf("\n %d \n",n);
其结果也是1. 和数组参数传进函数时的原理是一样的。追问

那有什么方法通过传参数的形式求长度吗?就像我写的那样,只需要一个数组的形参而不需要再输入数组的长度,这样调用起来的话会比较方便

追答

好像不能吧

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网