【问题标题】:Passing arrays vs structures to functions将数组与结构传递给函数
【发布时间】:2010-01-19 06:31:43
【问题描述】:

在 C 中,数组作为指针传递给函数。结构可以通过值或地址(指针)传递给函数。为什么我们不能按值传递数组但我们可以按值传递structre,有什么具体原因吗?

【问题讨论】:

    标签: c arrays struct


    【解决方案1】:

    在 C 中,一切都是按值传递的。还有一条规则说,在大多数情况下,数组的名称等价于指向其第一个元素的指针。将数组传递给函数就是这样的上下文。

    所以,特例不是通过引用传递数组,特例是the rule about arrays decaying to pointers。这给人的印象是数组是通过引用传递的(实际上是这样,但现在你知道为什么了!)

    我上面链接中的帖子更详细地解释了不同上下文中数组的类型。

    【讨论】:

    • 指针由 val 传递。诠释*p1,诠释*p2; p1 = p2;这里没有参考资料。地址从 p2 复制到 p1。
    • 是的,指针是按值传递的,就像其他一切一样。对于数组,效果 就好像它们是通过引用传递的,但是因为关于数组衰减为指针的“规则”。当然,数组第一个元素的指针值是传值的,不过这种情况下无所谓。
    • 谢谢阿洛克!尖头帖子中的解释非常有帮助
    • 你在哪里找到这个“值上下文”和“对象上下文”的解释?有没有什么书能解释这么详细的程度?
    • 从阅读comp.lang.c,然后是标准。一个非常好的描述是web.torek.net/torek/c/expr.html#therule。其实elf.torek.net/torek/c都很好。
    猜你喜欢
    • 2015-02-24
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 2021-11-02
    • 2019-06-22
    • 2019-05-03
    相关资源
    最近更新 更多