Nano Hash - криптовалюты, майнинг, программирование

Что означает амперсанд в вызове функции?

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

adjust(&total, adjustmentFactor);

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



Ответы:


1

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

Ваша функция 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 каждый раз, когда хотите использовать значение, на которое указывает первый аргумент, и каждый раз, когда вы хотите присвоить новое значение исходной переменной.

16.01.2020

2

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

  1. По стоимости

    общая сумма;

    настроить (всего);

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

  2. По ссылке

    общая сумма;

    настроить(&всего);

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

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

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

указатели

16.01.2020
  • Я хотел бы отметить, что C полностью передается по значению, но это значение может быть адресом, который должен быть передан в указатель, в отличие от языка, такого как C++, который на самом деле имеет определенную концепцию < i>передача по ссылке 17.01.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..