2017-01-21 75 views
0

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

+0

检查我的答案我希望你会发现,我测试过的有用的 –

+0

,它显示按价值传递。 –

+0

如果你这样的事情,它已经创建一个局部变量首先给你的代码链接,我会告诉你如何。 –

回答

4

它通过价值传递。下面的代码说明这种情况:

#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; 
} 

的输出是:

巴= 6

全球= 5

在此代码global被作为传递一个参数为foo,我们称这个参数为bar。因此,在开始时和globalbar都具有值5。但随后bar的值指定为6,并且由于参数是由值所引用,global停留在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; 
} 

现在的输出为:

巴= 6

全球= 6

+0

谢谢。这就是我真正想要的。 –

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

+0

感谢您的帮助。 :) –

+0

我没有这样的回购还没有投票给你。:) –

+0

@ user367180这是你的帖子,你可以upvote答案或接受答案是好的?是的,你可以只接受一个绿色的答案:) –

3

本地和全局变量传递给函数的值C.如果您需要通过引用传递,你需要使用指针。

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总是传递一个值,然而,该值可以是变量的值(按值调用),也可以是指向变量(通过引用调用)的指针。