带有函数的c指针

时间:2014-03-24 06:01:59

标签: c function pointers

编写一个将接受用户总秒数的程序。将此值连同三个变量的地址(小时,分钟,秒)传递给名为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;


 }

2 个答案:

答案 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函数中,因为它们指的是内存位置。