声明数组参数

这里有一个有趣的问题。如果你想把一个数组名参数传递给函数,正确的函数形参应该是怎样的?它是应该声明为一个指针还是一个数组?正如你所看到的那样,调用函数时实际传递的是一个指针,所以函数的形参实际上是个人指针。但为了使程序员新手更容易上手一些,编译器也接受数组形式的函数形参。因此,下面两个函数原型是相等的:

int strlen(char *string);
int strlen(char string[]);

这个相等性暗示指示指针和数组名实际上是相等的,但千万不要被它糊弄了!这两个声明确实相等,但只是在当前这个上下文环境中。如果它们出现在别处,就可能完全不同,就像前面讨论的那样。但对于数组形参,你可以使用任何一种形式的声明。你可以使用任一种声明,但哪个”更加准确”呢?答案是指针。因为实参实际上是个指针,而不是数组。同样,表达式 sizeof string 的值是指向字符的指针的长度,而不是数组的长度。现在你应该清楚为什么函数原型中的一维数组形参无需写明它的元素数目,因为函数并不为数组参数分配内存空间。形参只是一个指针,它指向的是已经在其他地方分配好内存的空间。这个事实解释了为什么数组形参与任何长度的数组匹配一它实际传递的只是指向数组第1个元素的指针。另一方面,这种实现方法使函数无法知道数组的长度。如果函数需要知道数组的长度,它必须作为一个显式的参数传递给函数。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九层指针

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值