Зачем использовать адрес переменной для умножения другой переменной? - PullRequest
0 голосов
/ 24 января 2019
int main(int argc, char **argv) {
    double principal = strtod(argv[1], NULL);
    double rate = strtod(argv[2], NULL);

    invest(&principal, rate);

    printf("%.2f\n", principal);
    return 0;
}

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

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Когда вы «помещаете переменную в качестве аргумента», вы передаете значение переменной. Все аргументы C передаются по значению.

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

Вот почему первый аргумент, который он принимает, это указатель. main передает этот адрес из principal, поэтому invest может изменять саму переменную.

0 голосов
/ 24 января 2019

Всякий раз, когда аргумент передается функции, функция получает его копию.Ничто из того, что функция может сделать с этой копией, не повлияет на оригинал.Для того чтобы информация передавалась из функции вызывающей стороне, должна произойти одна из двух вещей.Либо функция должна вернуть значение, либо функция должна поместить его куда-нибудь, где вызывающий может найти его.Указатель служит для идентификации объекта, из которого информация может быть записана или для которой она может быть прочитана.Я ожидал бы, что функция invest() предназначена для чтения значения, идентифицированного переданным указателем (то есть в этом случае прочитайте principal, затем выполните некоторые вычисления и затем сохраните результат обратно в тот же объект (снова,principal).

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