"在函数参数中传递全局变量时,是通过引用还是值传递的?
它是按值传递的。以下代码显示情况确实如此:
#include <stdio.h>
int global = 5;
void foo(int bar){
bar = 6;
printf("bar = %dnglobal = %d", bar, global);
}
int main(){
foo(global);
return 0;
}
输出为:
柱 = 6
全局 = 5
在这个代码中global
作为参数传递给foo
,我们称这个参数为bar
。因此,在开始时,global
和bar
是两个不同的变量,其值均为 5。但随后bar
被赋值 6,并且由于参数是按值引用的,因此global
保持在 5。
要通过引用传递变量,请使用指针:
#include <stdio.h>
int global = 5;
void foo(int *bar){
*bar = 6;
printf("bar = %dnglobal = %d", *bar, global);
}
int main(){
foo(&global);
return 0;
}
现在输出为:
柱 = 6
全局 = 6
局部变量和全局变量都通过 C 中的值传递给函数。如果需要通过引用传递,则需要使用指针。
如何传递/必须传递取决于函数,而不是变量:
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 总是传递一个值,但是,该值可以是变量的值(按值调用),也可以是指向变量的指针(按引用调用)。
首先,为什么我们需要在函数中传递全局变量? 如果您不知道,我们可以直接在程序中的任何位置访问它。
#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
对于演示 http://ideone.com/VLWqNO