数组参数传递后,子函数能计算长度吗?

问题:
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;
}在这里插入代码片
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值