kopvvd 2020-07-14 13:28 采纳率: 66.7%
浏览 383
已采纳

如何在函数里面知道形参传入数组的元素个数?

我们知道sizeof()一个数组名得出的结果是数组元素的个数,
但是用指针的形式定义一个字符串,再sizeof这个指针名,得出的结果是一个字符指针类型的大小,在我的设备上面就是4,
那么我现在要向一个函数里面传递一个数组,我现在只知道在定义形参的时候定义为

void  fun(char *x )

或者

void  fun(char x[] )

的形式。
但是经过我自己的测试,在函数里面调用sizeof(x)之后,无论数组元素个数的多少,结果都是4,那么问题来了。我想找函数里面知道传入数组的元素个数该怎么办?

图片说明
图片说明

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-07-14 14:47
    关注
    没办法知道,数组到了函数退化成指针,sizeof返回1,而不是数组的大小。
    要么类似string那样,自己维护一个长度,要么char[]使用某个特殊符号作为最后一个元素的标志('\0'),要么把长度作为一个额外的参数传进去。
    
    更进一步解释就是,c语言为了效率,没有存储数组的长度,也没有判断数组越界的机制,sizeof不是函数,而是运算符。在编译期可以确定的,会得到正确的值
    比如
    int a[10]
    sizeof(a)
    此时知道是10
    但是
    void f(int a[])
    因为编译的时候,编译器搞不清谁调用它,传入的是什么a,也许很多变量都会被当作参数传入呢。所以就不能确定
    

    问题解决的话,请点下采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料