“在函数参数中传递全局变量时,是通过引用还是值传递?”
答案 0 :(得分:5)
按价值传递。以下代码显示了这种情况:
#include <stdio.h>
int global = 5;
void foo(int bar){
bar = 6;
printf("bar = %d\nglobal = %d", bar, global);
}
int main(){
foo(global);
return 0;
}
输出结果为:
bar = 6
global = 5
在此代码global
作为foo
的参数传递,我们调用此参数bar
。所以在开头global
和bar
是两个不同的变量都具有值5.但是bar
被赋值为6,因为参数是由值引用的{{1}停留在5。
要通过引用传递变量,请使用指针:
global
现在输出是:
bar = 6
global = 6
答案 1 :(得分:3)
本地和全局变量都按C中的值传递给函数。如果需要通过引用传递,则需要使用指针。
答案 2 :(得分:3)
变量如何/必须传递,取决于函数,而不是变量:
int gMyVar;
void foo(int a); // says "call me by value"
void bar(int *b); // says "call my by reference"
foo
需要传递一个int。你必须把它称为foo(gMyVar
)。
bar
需要指向int的指针。您必须将其称为bar(&gMyVar)
。
因此,正如其他答案所示,C总是传递一个值,但是,值可以是变量的值(按值调用),也可以是指向变量的指针(通过引用调用)。
答案 3 :(得分:1)
首先,为什么我们需要在函数中传递Global变量?如果您不知道,我们可以直接访问程序中的任何位置。
#include <stdio.h>
int x = 10; //global variable
void fun()
{
printf("%d",x); // direct access
}
int main(void) {
fun(); // no argument required
return 0;
}
输出
10