【问题标题】:Why use an the address of a variable to multiply another variable?为什么使用一个变量的地址来乘另一个变量?
【发布时间】:2019-01-24 05:57:47
【问题描述】:
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 中的变量。它们都作为变量启动。为什么我们不在两个参数中都放入变量?

【问题讨论】:

    标签: c pointers


    【解决方案1】:

    当您“将变量作为参数”时,您传递变量的值。 C 的所有参数传递都是按值传递的。

    invest 需要修改 principal 来保存另一个值,这可以从函数调用后打印它的值这一事实看出。如果给出的只是存储在principal 中的原始值的副本,它怎么能做到这一点?

    这就是为什么它接受的第一个参数是一个指针。 main 传递principal地址,因此invest 可以修改变量本身。

    【讨论】:

    • 那么在这种情况下,&principalrate 都是值,而指针 &principal 就像一个中间变量?
    • @user8314628 - 在invest 的声明中需要一个指针参数(例如double *pInvest)。那就是持有地址的中间变量,是的。
    【解决方案2】:

    每当将参数传递给函数时,函数都会收到它的副本。该功能对该副本所做的任何事情都不会影响原件。为了将信息从函数传递给它的调用者,必须发生两件事之一。要么函数需要返回值,要么函数必须把它放在调用者可以找到的地方。指针用于标识可以从中写入信息或可以读取信息的对象。我希望invest() 函数旨在读取由传入指针标识的值(即在本例中读取principal,然后执行一些计算,然后将结果存储回同一个对象(再次, principal)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-30
      相关资源
      最近更新 更多