【问题标题】:What is the difference between array parameters in CC中的数组参数有什么区别
【发布时间】:2010-05-03 04:15:13
【问题描述】:

在 C/C++ 中创建和返回数组的以下函数声明有什么区别?两种方法都创建数组并用适当的值填充它,如果一切都通过,则返回 true。

bool getArray(int* array);
bool getArray(int* array[]);

谢谢

最好的问候, 钢

【问题讨论】:

  • 第一个如何返回一个新数组?您在创建问题时是否遗漏了星号?

标签: c arrays return-value argument-passing


【解决方案1】:

如果它帮助你思考它,你可以记住int foo[] 在一个层面上与int *foo 是一样的。因此,在您的示例中,第一个传递了一个指向 int 的指针,而第二个传递了一个指向 int 的指针。

【讨论】:

  • 澄清一下:int foo[]int *foo在函数参数的上下文中是等价的
  • 嗨,谢谢 - 这真的有助于解决我的问题。我通常只使用带有特殊容器类的 C++ 或 Objective-C,每次我做纯 C 时我都会遇到麻烦几天,直到我走上正确的道路:(( 正确的问题应该是:什么是bool getArray(int** array);bool getArray(int* array[]); 之间的区别我认为(希望是正确的)没有区别......谢谢大家的帮助。问候
【解决方案2】:

bool getArray(int *array); 将指向 int 的指针作为参数(实际上是要填充的 int 数组)。 bool getArray(int *array[]);接受一个 int 指针数组。第一个是您想要的,尽管调用者需要分配一个足够大的输出数组,以便getArray() 可以将数组元素复制到其中。

理解 C 指针/数组声明的一种方法是将它们视为说明如何访问基类型。 int *array 表示如果你说 *array,你会得到一个 int。 int *array[] 表示如果你说 *array[x],你会得到一个 int。 char (*array)[5][2][3] 表示如果你说(*array)[0 thru 4][0 thru 1][0 thru 2],你会得到一个字符。

【讨论】:

  • 如果我这样做,我可能会这样做int *getArray() ;-)
【解决方案3】:

附带说明,您发布的代码是 C++。没有“C/C++”之类的东西......使您的原型可识别为符合 C++ 标准的原因是函数的返回类型使用了数据类型“bool”。布尔变量未在 C 中定义。

【讨论】:

  • "bool" 在 C99 中被添加到 C 中,尽管您必须 #include 才能获得它。
【解决方案4】:

第二个需要一个指向数组的指针。所以如果你的数组是int *getme;,那么你调用getArray(&getme);

【讨论】:

  • 不,第二个需要一个指针数组。指向数组的指针是int (*array)[]
猜你喜欢
  • 1970-01-01
  • 2010-09-14
  • 2010-10-10
  • 2012-12-03
  • 2013-01-22
相关资源
最近更新 更多