簡體   English   中英

具有函數的c指針

[英]c pointers with functions

編寫一個程序,該程序將接受用戶的總秒數。 將此值以及三個變量(小時,分鍾,秒)的地址傳遞給名為time()的函數,該函數將計算小時,分鍾和秒的數量。 main()打印此信息。

請幫我,我如何修復我的代碼以使該程序按應有的方式工作。

   /* 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;


 }

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;

試試這個,剛剛修改了程序

#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 ;
 }

將參數傳遞給函數的按引用調用方法會將參數的地址復制到形式參數中。 在函數內部,該地址用於訪問調用中使用的實際參數。 這意味着對參數所做的更改會影響傳遞的參數。

為了通過引用傳遞函數,只需傳遞要修改的變量的地址即可;即; 函數調用中的小時,分​​鍾,秒的地址。 該地址是通過在“&”運算符前面添加而獲得的。 因此,給定“&hours”將給出在函數調用中使用的可變小時數的地址,該地址將分配給函數定義中的指針。

void time(int *h,int *m ,int *s, int num);

所以像這樣的函數調用

time(&hours, &minutes, &seconds, num);

定義指針* h指向變量hours的地址,

指針* m指向變量minutes的地址,

指針* s指向變量秒的地址,

並將秒數的值分配給num

因此,分配給指針的任何值都會反映在main函數中,因為它們引用的是內存位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM