objective-c - 为什么数组按引用传递,而结构在 C 中隐式按值传递?

标签 objective-c c linux

<分区>

他们为什么要这样设计?我很困惑。

更新:我真的很想知道问题的答案。我用谷歌搜索,但找不到任何有用的东西。

我认为可能有两个原因:

:技术。也许编译器很难实现(通过引用传递结构)。如果答案是这个。请解释一下。

:适合使用(编程)。正如我认为的那样,如果 struct 通过引用传递,它会更优雅(或更漂亮?)。我找不到一些显示优势的示例(strut 按值传递)。我的编程生涯不是很长。在实践中,我更喜欢将 struct 作为指针传递给函数(指针在堆栈上占用的空间更少)。

最佳答案

您可以将数组想象成一个包含连续内存位置的集合,数组名称作为指向该集合第一个内存地址的指针。

所以现在应该很明显,当您通过名称传递数组时,您实际上是在传递该内存地址的副本。

然而,结构是一组对象,因此当您传递结构名称时,您传递的是该集合中对象的副本。

PS:这是一个非常基本的 C 概念和一个明显的疑问,最好阅读一本好的 C 书籍以进一步理清您的概念。

关于objective-c - 为什么数组按引用传递,而结构在 C 中隐式按值传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10843904/

相关文章:

ios - 自动布局:使用 ScrollView 时宽度不正确

c - 力、平方根和表格程序

c - 为什么内存没有正确分配给 C 中的 char*?

c - 逻辑运算后十六进制到bin

ios - 从 webservice 获取的图像未显示在 viewcontroller 中

ios - 下面的 NSObject 代码是多余的吗?

linux - Bash 脚本如果 elif elif 不工作

linux - 如何在从同一脚本调用的新 shell 中继续运行该脚本?

ios - 在 iOS 中单击 UIButton 时,不止一个 UITextField 键盘关闭

java - System.getenv 不会在 Amazon Linux 上选择任何系统变量