为什么使用变量的地址乘以另一个变量?

时间:2019-01-24 05:57:48

标签: c pointers

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 :(得分:2)

每当将参数传递给函数时,函数都会接收到它的副本。该功能对该副本没有任何影响。为了使信息从函数传递给调用者,必须发生以下两种情况之一。函数要么需要返回值,要么函数必须将其放置在调用者可以找到它的地方。指针用于标识可以从中写入信息或从中读取信息的对象。我希望invest()函数旨在读取传入的指针标识的值(即,在这种情况下,读取principal,然后执行一些计算,然后将结果存储回相同的值对象(同样是principal)。

答案 1 :(得分:2)

“将变量作为参数输入”时,将传递变量的值。 C的所有参数传递都是按值进行的。

invest需要进行修改 principal来保存另一个值,这可以从调用该函数后打印出它的值来证明。如果只给出了principal中存储的原始值的副本,怎么办?

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