«При передаче глобальной переменной в функциональном параметре она передается по ссылке или значению?»Глобальная переменная как аргумент вызова функции в C
ответ
Передано по значению. Следующий код показывает, что это так:
#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
Спасибо. Это то, чего я действительно хотел. –
Прежде всего, зачем нам передавать глобальную переменную в функцию? мы можем напрямую обращаться к нему в любом месте программы, если вы этого не знаете.
#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
Спасибо за помощь. :) –
У меня нет такого репо, чтобы проголосовать за вас.:) –
@ user367180 это ваше сообщение, на которое вы можете ответить или ответить, что это хорошо? да, вы можете принять только один ответ с зеленым галочкой :) –
как местные, так и глобальные переменные передаются функции по значению в 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 всегда передает значение, однако значение может быть значением переменной (вызов по значению) или может быть указателем на переменную (вызов по ссылке).
проверить мой ответ Я надеюсь, что вы найдете это полезным –
Я тестировал, он показывает Pass по значению. –
, если вы такие вещи уже создадите локальную переменную, прежде всего передайте свою кодовую ссылку, я покажу вам, как это сделать. –