我在调用结构时遇到问题,将它们作为参数放入 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;
}
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 *
类型。
我相当确定您的问题在于
next_day(&d,31);
您已经有了结构的地址,您不需要再次使用 &
运算符。尝试用 next_day(d,31);
来调用它。
这应该显示在编译器警告中;请务必仔细阅读这些警告。