全局变量作为C中函数调用的参数

时间:2017-01-21 10:02:42

标签: c global-variables

“在函数参数中传递全局变量时,是通过引用还是值传递?”

4 个答案:

答案 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。所以在开头globalbar是两个不同的变量都具有值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

对于演示http://ideone.com/VLWqNO