【问题标题】:Function returning array practices [duplicate]函数返回数组的做法[重复]
【发布时间】:2013-06-10 20:35:43
【问题描述】:

我刚刚开始了我的回归根项目;学习 C。老实说,当您需要开发桌面/服务器应用程序时,抽象很好,但是使用 C,事情变得个人化了。这很好,换了!

现在进入重点;我正在阅读使用带有函数的数组(Programming in C, Stephen G. Kochan。)我了解到,当将函数作为参数传递时,编译器将始终将引用视为指针,如下所示:

void foo (char *array);

以这个为例:

void foo (char *a) 
{
    a[0] = 'R'; // side effect
}

int main (void) 
{
    char a[] = "The quick brown fox jumps over the lazy dog!";
    foo (a);
}

我没有得到有关返回数组或指向数组的指针的函数的信息。该函数会更改其参数中的数组,从而导致副作用(如上所示)。

函数是否可以返回指向数组的指针?还是上述方法只是首选?

提前感谢那些可以提供解释的人。

【问题讨论】:

  • void main() 应该是 int main(void)。请修复你的代码,烧掉任何告诉你写void main()的书;它的作者不懂语言。 (我刚刚在 Amazon 上查看了 Stephen G. Kochan 的“Programming in C”;至少在第 3 版中,我能够看到的示例正确使用了int main(void)。)
  • 阅读comp.lang.c FAQ的第6部分。
  • @KeithThompson - 抱歉打扰了。一个错字
  • void main(void) 并不比void main() 好。这是int main(void)
  • @7SLEVIN:不,不可能从函数返回数组。 n 这与不明智无关;如果你尝试它,你将返回一个指向第一个元素的指针,不是一个数组。它们是不同的东西。一抓;您可以将数组包装在结构中。

标签: c


【解决方案1】:

函数可以返回指向数组第一个元素的指针,但问题更大,您要么必须malloc 数组的内存(如strdup),要么有一个静态数组(如ctime )。

malloc 给出了必须记住释放内存(内存泄漏)的问题,静态意味着每次调用都会更改数组,因此传递现有数组更容易。

【讨论】:

  • 函数返回指向数组的第一个元素的指针更为常见。 (然后您必须使用其他机制来确定数组的长度。)
【解决方案2】:

我不确定我是否遵循。您的函数是 void 类型。您是否尝试通过将数组作为参考传递来修改数组?

在 C 中,如果返回指向数组第一个元素的指针,则实际上返回整个数组,因为 C 数组在程序内存中是连续的(可能不在物理内存中)。因此,当您返回指向第一个元素的指针时,您实际上是在告诉您的主函数整个数组的存储位置。

【讨论】:

    猜你喜欢
    • 2011-09-19
    • 1970-01-01
    • 2010-12-12
    • 2012-02-03
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多