2011-11-27 7 views
0

구조체를 호출하여 void 함수에 인수로 넣은 다음 인수가 동일한 구조체를 갖는 다른 void 함수를 호출하므로 포인터와 결과를 모두 넣습니다. 보이지 않습니다. 별도로 호출하면 작동하지만 중첩 된 함수는 작동하지 않습니다.중첩 된 함수의 구조체 호출 포인터

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

typedef struct date { 
     int day; 
     int month; 
     int year; 
} date; 

void next_day(date *d,int days) 
{ 
     if(d->day < days) { 
       int m = d->day + 1; 
       d->day = m; 
     } 
     else 
     { 
       int m = d->year + 1; 
       d->year = m; 
       d->month = 1; 
     } 
} 

void tom(date *d) 
{ 
     switch(d->month) 
     { 
       case 1: case 3: case 5: case 7: case 8: case 10: case 12: 
         next_day(&d,31); 
         break; 
       case 4: case 6: case 9: case 11: 
         next_day(&d,30); 
         break; 
       case 2: 
         if(d->year % 4 == 0) 
           next_day(&d,29); 
         else 
           next_day(&d,28); 
         break; 
     } 
} 

int main(void) 
{ 
     //date d = malloc(sizeof(date)); 
     date d; 
     printf("Enter day, month, year: "); 
     scanf("%d %d %d",&(d.day),&(d.month),&(d.year)); 
     tom(&d); 
     printf("The next day is: %d %d %d",d.day,d.month,d.year); 
     return 0; 
} 

코드를 찾는 사람에게 미리 감사드립니다.

+0

결과가 * 표시되지 않음을 의미합니까? –

답변

1

고객님의 문제는 이미 next_day(&d,31);입니다. 구조의 주소가 이미 있으니 & 연산자를 다시 사용할 필요가 없습니다. next_day(d,31);으로 전화 해보십시오.

이것은 컴파일러 경고에 표시되어야합니다. 항상주의를 기울여주의 사항을 읽으십시오. 넌 함수 인수를 최종 수신 수단에서 포인터의 주소를 보내는

1
next_day(&d,31); // At this point `d` is a pointer to a struct type. 

포인터 (즉, date **) 포인터 할 필요가있다. 그러나 귀하의 경우에는 그렇지 않습니다.

void next_day(date *d,int days) 

그래서, 그냥 할 -

next_day(d,31); // Notice the removal of & 

지금 d 유형 date *이며 수신 측 또한 인수 유형 date *이다.