【问题标题】:Difference between int [] and int* as function argumentsint [] 和 int* 作为函数参数的区别
【发布时间】:2012-01-15 12:27:39
【问题描述】:

这是一道面试题:

int []int* 有什么区别,它们都是函数的输入参数。

f(int a[] , int* b)

我的答案:

对于f(),它们具有相同的功能。第一个是a[]中第一个元素的开始位置。

第二个指向int

但是,如何在不传递其他参数的情况下区分它们?

【问题讨论】:

  • 您说的“将它们彼此区分开来”是什么意思,这很不清楚。
  • 我想我对这个问题的理解与 Oli 有点不同 - 你能澄清一下吗?
  • ¤ 作为正式参数,声明 int a[] 衰减int* b 指针,例如int a[13],它只衰减为 int* b 指针(丢弃数组大小)。同样,作为形式参数,声明 int foo( double ) 衰减为 int (*foo)(double) 指针。直接使用指针语法更强大一些,因为它允许const/volatile 限定参数(注意:写int* const a 而不是仅仅int* a 不会影响函数签名,因为顶级@ 987654337@ 的形式参数不影响签名)。干杯&hth.,

标签: c++ c function pointers arguments


【解决方案1】:

在函数参数的上下文中,它们是相同的。以下所有内容完全相同

f(int a[], int *b)
f(int a[], int b[])
f(int *a, int *b)
f(int *a, int b[])

如果不传递一些额外信息,您将无法区分它们。

【讨论】:

  • 很公平 :) 感谢您的澄清 - 我想我在考虑将静态分配的数组传递给函数时感到困惑。
【解决方案2】:

作为函数参数,这两种类型完全一样,int []改写成int *,无法区分。 StackOverflow 中的许多问题都涵盖了这个主题,c-faq 甚至在指针和数组(作为参数或不作为参数)上有一个 special section。看看吧。

【讨论】:

  • +1:正确,尽管这并不意味着数组和指针相同
  • @TomalakGeret'kal 我决定再添加 4 个词,以保持“清晰”。
  • @sidyll:更好,虽然严格来说仍然不准确;没有类型int[]!这是语法糖,而不是类型等价。
  • @TomalakGeret'kal 天哪,这让我发疯。就这样吧,也许下个星期天我可以再做一次编辑(不要不必要地提出问题?)。那我可以去掉“类型”这个词。但是,虽然编译后不存在作为参数的数组类型,但在语言方面我相信我们可以这样称呼它。感谢您抽出宝贵时间帮助改进我的答案,如果我只是通过这些文本更正来打扰您,我们深表歉意。
  • @sidyll:但是它不是数组类型。并且在编译期间执行这种句法翻译。就像,作为一个早期的步骤,由语言本身授权。不仅仅是该数组在程序集中不存在;当然,数组永远不会存在于程序集中。
猜你喜欢
  • 2011-02-13
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
相关资源
最近更新 更多