Что означает амперсанд при вызове функции? - PullRequest
0 голосов
/ 17 января 2020

Я новичок в программировании на C, и я искал какой-то код. Мне было интересно, что означает следующее:

adjust(&total, adjustmentFactor);

Я знаю, что total и adjustmentFactor - оба типа double, но, поскольку эта функция присваивает вывод переменной, я предполагаю, что функция меняет общее количество очков? Если это то, что он делает, то как бы вы изменили его, если бы вам пришлось реализовать Adjust?

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Да, вы правы: амперсанд берет адрес l-значения (переменной) и передает его как указатель.

Ваша функция adjust() будет выглядеть следующим образом:

void adjust(double *a, double f) {
   ... do a lot of stuff
   *a = *a * f/2+1.0;     // dummy formula that will change the content 
   ...   
}; 

Так что в функции вы будете использовать *a каждый раз, когда захотите использовать значение, на которое указывает первый аргумент, и каждый раз вы хотите назначить новое значение исходной переменной.

0 голосов
/ 17 января 2020

Вы можете передать аргумент функции двумя способами:

  1. По значению

    int total;

    Adjust (total);

    В этом случае будет создана локальная копия переданного значения. Если вы измените его каким-либо образом, это не повлияет на значение «total» родительской функции.

  2. По ссылке

    int total;

    Adjust (& total);

В этом случае адрес переменной 'total' будет передан, и теперь, если вы каким-либо образом измените total внутри Adjust (), изменения будут перенесены. с общей переменной из родительской функции.

Я рекомендую вам прочитать:

Ссылка и разыменование

указатели

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...