Разница между «вызовом по ссылке» и глобальными переменными - PullRequest
0 голосов
/ 16 мая 2019

Может кто-нибудь сказать мне преимущества или недостатки следующих двух фрагментов кода C?У меня есть int x, к которому мне нужно получить доступ из нескольких функций.Лучше ли использовать его в качестве ссылочного параметра (фрагмент 1) или в качестве глобальной переменной (фрагмент 2)?

1-й фрагмент:

struct A {
    int x;
};

void init( struct A * a ) { 
    a->x = 0;
}

void incx( struct A * a ) {
    a->x++;
}

int main(void) {
  struct A a;
  init(&a);
  incx(&a);
  return 0;
}

2-й фрагмент:

int x;

void init() {   
    x = 0;
}

void incx() {
    x++;
}

int main(void) {
  init();
  incx();
  return 0;
}

1 Ответ

1 голос
/ 16 мая 2019

Когда вы передаете ссылку на объект, вы можете изменить любой объект, который хотите, и функция универсальна.

int inc(int *v)
{
    return ++(*v);
}

int v;

void foo()
{
    int x;
    int *y = malloc(sizeof(*y));

    struct 
    {
        int x;
        int y;
    }z;

    inc(&x);
    inc(y);
    inc(&z.y);
    inc(&v);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...