2017-01-21 108 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總是傳遞一個值,然而,該值可以是變量的值(按值調用),也可以是指向變量(通過引用調用)的指針。