2017-01-21 5 views
0

«При передаче глобальной переменной в функциональном параметре она передается по ссылке или значению?»Глобальная переменная как аргумент вызова функции в C

+0

проверить мой ответ Я надеюсь, что вы найдете это полезным –

+0

Я тестировал, он показывает Pass по значению. –

+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. Поэтому в начале global и bar две разные переменные и имеющие значение 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

Прежде всего, зачем нам передавать глобальную переменную в функцию? мы можем напрямую обращаться к нему в любом месте программы, если вы этого не знаете.

#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 это ваше сообщение, на которое вы можете ответить или ответить, что это хорошо? да, вы можете принять только один ответ с зеленым галочкой :) –

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 всегда передает значение, однако значение может быть значением переменной (вызов по значению) или может быть указателем на переменную (вызов по ссылке).

 Смежные вопросы

  • Нет связанных вопросов^_^