编写一个将接受用户总秒数的程序。将此值连同三个变量的地址(小时,分钟,秒)传递给名为time()
的函数,该函数将计算小时,分钟和秒的数量。从main()
打印此信息。
帮助我PLZ如何修复我的代码以使该程序按照预期的方式工作。
/* Adham Hamade
.
*/
#include <stdio.h>
#include <conio.h>
//function prototype
void time(int &,int &,int &, int);
int main()
{
//Variables
int num;
int hours;
int minutes;
int seconds;
//reference number variables
int *h = &hours;
int *m = &minutes;
int *s = &seconds;
printf("Please enter number of seconds");
scanf("%d",&num);
time(h, m, s, num);
printf("\n\nTime is %d hrs %d mins %d secs", hours, minutes, seconds);
getch();
return 0 ;
}
void time(int &h,int &m ,int &s, int num)
{
int sec;
int min;
int hr;
int t;
hr = num / 3600 ;
t = num %3600;
min = t/60;
sec = t%60;
hr = &h;
min = &m;
sec = &s;
}
答案 0 :(得分:3)
C中没有引用的调用,只能通过引用传递 改变
void time(int &,int &,int &, int);
到
void time(int *, int *, int *, int);
在time
的函数定义中,更改
hr = &h;
min = &m;
sec = &s;
到
*h = hr;
*m = min;
*s = sec;
答案 1 :(得分:0)
试试这个,只修改你的程序
#include <stdio.h>
//function prototype
void time(int *h,int *m ,int *s, int num);
int main()
{
//Variables
int num;
int hours;
int minutes;
int seconds;
//reference number variables
int h ;
int m ;
int s;
printf("Please enter number of seconds");
scanf("%d",&num);
time(&hours, &minutes, &seconds, num);
printf("\n\nTime is %d hrs %d mins %d secs", hours, minutes, seconds);
getch();
return 0 ;
}
void time(int *h,int *m ,int *s, int num)
{
int sec;
int min;
int hr;
int t;
hr = num / 3600 ;
t = num %3600;
min = t/60;
sec = t%60;
*h= hr ;
*m = min ;
*s =sec ;
}
将参数传递给函数的按引用调用方法将参数的地址复制到形参中。在函数内部,该地址用于访问调用中使用的实际参数。这意味着对参数所做的更改会影响传递的参数。
通过引用传递函数, 只需传递要修改的变量的地址即;函数调用中的小时,分钟,秒的地址。该地址是通过预先添加&符号运算符&#39;&#39; 。所以给予&amp;&amp; hours&#39;给出函数调用中使用的变量小时的地址分配给函数定义中的指针。
void time(int *h,int *m ,int *s, int num);
所以函数调用如
time(&hours, &minutes, &seconds, num);
定义了 指针* h指向变量小时的地址,
指针* m指向变量分钟的地址,
指针* s指向变量seconds的地址,
并将秒数的值分配给num
因此,分配给指针的任何值都反映在main函数中,因为它们指的是内存位置。