通过参考函数调用

时间:2010-03-22 05:50:57

标签: c pointers reference

我希望通过我的家庭作业来推动正确的方向。这是一个问题:

  

(1)写一个名为input的C函数返回void,这个   功能提示用户输入   两个整数后跟一个双精度   精度值。这个函数读取   这些值来自键盘和   找到两个整数的乘积   进入。该函数使用call by   参考来传达价值观   读取的三个值和产品   计算回主程序。   然后主程序打印出来   读取三个值和产品   计算。提供测试结果   输入:3 5 23.5。不要使用数组   或程序中的全局变量。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

void input(int *day, int *month, double *k, double *pro);

int main(void){
    int i,j;
    double k, pro;


    input(&i, &j, &k, &pro);
    printf("%f\n", pro);
    return 0;
}

void input(int *i, int *j, double *k, double *pro){

    int x,y;
    double z; 
    double product;

    scanf("%d", &x);
    scanf("%d", &y);
    scanf("%f", &z);


    *pro += (x * y * z);

} 

我无法弄清楚如何用指针真正引用变量,这对我来说不合适。

任何帮助都会很棒!

5 个答案:

答案 0 :(得分:3)

您添加到pro但未初始化,您不会将值传递回pro。您将值存储到传入的变量的地址中。在这种情况下,您需要取消引用访问/检索值的指针,*i,并在您的方法中直接使用传递的地址 - 然后您不需要取地址再次。

这有效 - 我将double替换为float ...:

#include <stdio.h>
#include <stdlib.h>

void input(int *day, int *month, float *k, float *pro);

int main(void){
    int i,j;
    float k, pro;

    i = j = k = pro = 0;

    input(&i, &j, &k, &pro);
    printf("%f\n", pro);
    printf("%d : %d : %f\n", i,j,k);
    return 0;
}

void input(int *i, int *j, float *k, float *pro){

    scanf("%d", i);
    scanf("%d", j);
    scanf("%f", k);

    printf("%d - %d - %f\n", *i,*j,*k);

    *pro += (*i * *j * *k);
}

输出:

1
2
3.5
1 - 2 - 3.500000
7.000000
1 : 2 : 3.500000

答案 1 :(得分:2)

你几乎就在那里,但不是使用新变量xyz,而是使用你传递的指针:

scanf("%d", i);
scanf("%d", j);
scanf("%f", k);

*pro += ((*i) * (*j) * (*k));

答案 2 :(得分:1)

在阅读input函数中的数字时,您可以使用指针iptrjptrkptrproptr直接读取值转换为i函数中声明的变量jkmain

void input(int *iptr, int *jptr, double *kptr, double *proptr){

    scanf("%d", iptr); // read directly into i using pointer to i.
    scanf("%d", jptr);
    scanf("%f", kptr);   

    *proptr = ( (*iptr) * (*jptr) ); // compute product and assign to pro.
} 

答案 3 :(得分:1)

*pro += (x * y * z);

这将打破可怕的局面。您正在将产品添加到事先发生的任何垃圾中。您想要删除+,即:

*pro = (x * y * z);

答案 4 :(得分:0)

您的程序没有做的是将输入值设置为i,j和k。

而不是使用x,y和z,而是使用参数。