当我们可以选择将变量设为外部时,为什么我们通过引用传递?

fud*_*din 3 c pointers pass-by-reference

假设我们有一个数组说:

int arr[1000];
Run Code Online (Sandbox Code Playgroud)

我有一个适用于该数组的函数说:

void Func(void);
Run Code Online (Sandbox Code Playgroud)

当我可以将arr [1000]作为main()外部的外部变量时,为什么需要通过引用传递(通过更改void)?

  1. 有什么区别?有什么区别吗?
  2. 为什么人们更喜欢通过引用传递而不是将其作为外部传递?(我自己认为将它制作成外部更容易).

R..*_*R.. 10

如果使用全局变量arr,Func则仅限于始终与该一个变量一起使用,而不是其他任何变量.以下是可能导致错误的原因:

  • arr 是您正在使用的"当前文档"的一部分,之后您决定要让您的程序支持打开多个文档.
  • 你后来决定(或者某人使用你的代码作为库决定)使用线程,当两个线程相互破坏时,你的程序会突然崩溃arr.
  • 您之后决定将您的代码设置为库,现在它对调用程序(如果在程序中使用多个库的位置)提供缓冲区是有意义的; 否则调用代码的独立部分将知道彼此的实现.

一旦消除全局变量并使您的函数指向他们需要操作的数据,所有这些问题就会消失.


Jac*_*cob 7

我想你在问全局变量是不是很糟糕.引用一个很好的答案:

全局变量的问题在于,由于每个函数都可以访问这些函数,因此越来越难以确定哪些函数实际读取和写入这些变量.

要了解应用程序的工作原理,您几乎必须考虑修改全局状态的每个函数.这可以做到,但随着应用程序的增长,它将变得越来越难以实际上不可能(或者至少完全浪费时间).

如果不依赖全局变量,则可以根据需要在不同函数之间传递状态.这样你就可以更好地理解每个函数的作用,因为你不需要考虑全局状态.