C 按引用调用函数
我只想把我的家庭作业推向正确的方向。问题是: (1) 编写一个名为input的C函数,返回void,如下所示 函数提示用户输入 两个整数后跟一个双精度 精度值。此函数读取 这些值来自键盘和 查找两个整数的乘积 进入。该函数使用callby 用于传达 读取的三个值和乘积 计算回到主程序。 然后,主程序打印 读取三个值并生成产品 计算提供测试结果 输入:3523.5。不要使用数组 或程序中的全局变量 这是我的代码:C 按引用调用函数,c,pointers,reference,C,Pointers,Reference,我只想把我的家庭作业推向正确的方向。问题是: (1) 编写一个名为input的C函数,返回void,如下所示 函数提示用户输入 两个整数后跟一个双精度 精度值。此函数读取 这些值来自键盘和 查找两个整数的乘积 进入。该函数使用callby 用于传达 读取的三个值和乘积 计算回到主程序。 然后,主程序打印 读取三个值并生成产品 计算提供测试结果 输入:3523.5。不要使用数组 或程序中的全局变量 这是我的代码: #include <stdio.h> #include <stdl
#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);
}
#包括
#包括
无效输入(整数*天,整数*月,双*k,双*pro);
内部主(空){
int i,j;
双k,亲;
输入(&i,&j,&k,&pro);
printf(“%f\n”,pro);
返回0;
}
无效输入(int*i、int*j、double*k、double*pro){
int x,y;
双z;
双乘积;
scanf(“%d”和&x);
scanf(“%d”和“&y”);
scanf(“%f”、&z);
*pro+=(x*y*z);
}
我真的不知道如何用指针引用变量,这对我来说就是行不通
任何帮助都会很好 在
input
函数中读取数字时,您可以使用iptr
、jptr
、kptr
和proptr
指针,将值直接读取到main
函数中声明的变量i
、j
和k
,如下所示:
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.
}
您的程序没有做的是将输入值设置为i、j和k
不要使用x、y和z,而要使用参数。您就快到了,但是不要创建新变量
x
、y
和z
,而是使用您传递的指针:
scanf("%d", i);
scanf("%d", j);
scanf("%f", k);
*pro += ((*i) * (*j) * (*k));
这将是可怕的崩溃。您正在将产品添加到pro中的任何垃圾中。您要删除+
,即:
*pro = (x * y * z);
如果添加到
pro
,但未初始化,则不会将值从pro
传递回。将值存储到传入的变量的地址中。在这种情况下,您需要取消对指针的引用以访问/检索值,*i
,并且在您的方法中直接使用传递的地址,这样您就不需要再次获取它们的地址
这是有效的-我用float
替换了double
:
#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);
}
是我,还是问题没有指定我对读入的双值执行任何操作?@Chad:这就是我从问题中得到的。为什么
+=
?双精度还没有初始化,所以你可能会得到垃圾。
#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