问题:
1. 传递数组时,无法在子函数中计算数组长度?
2. 在主函数中求长度和在子函数中求长度的结果不一样。**
例子:
#include <stdio.h>
typedef struct struct_LH
{
int a;
double b;
}LH;
void func(LH x[],int *pn)
{
*pn=sizeof(x)/sizeof(x[0]);
printf("fun len=%d\n",*pn);
}
int main()
{
LH arr[20];
int n;
func(arr,&n);
printf("main len= %d\n",sizeof(arr)/sizeof(arr[0]));
return 0;
}
结果:fun arr len=0
main arr len= 20
原因:
参数的传递是把实参的值或副本或地址传递给形参,但数组较例外,数组传递时只会传递数组的首地址,参数到了函数内就成了普通指针,函数在后面需要用到数组元素时再根据首地址和下标去找,因而这就导致了刚开始的错误。
解决方法:
只能先计算好长度后再传过去,进行其他的运算。
#include <stdio.h>
typedef struct struct_LH
{
int a;
double b;
}LH;
void func(LH x[],int pn)
{
printf("fun len=%d\n",pn);
}
int main()
{
LH arr[20];
int n;
func(arr,20);
printf("main len= %d\n",sizeof(arr)/sizeof(arr[0]));
return 0;
}在这里插入代码片