C语言中如何以结构体变量的地址作为函数形参,以便将指向结构体变量的指针传递给它?

已经调通了同时以指向结构体变量的指针作为形参和实参,但不知道如何以结构体变量的地址作为形参?谭浩强的书上也没有详细说明,只是一带而过。练习程序:判断一年中某日是本年第几天... 已经调通了同时以指向结构体变量的指针作为形参和实参,但不知道如何以结构体变量的地址作为形参?谭浩强的书上也没有详细说明,只是一带而过。
练习程序:判断一年中某日是本年第几天:
#include<stdio.h>
struct Yearmonthday
{ int year;
int month;
int day;
};
int main()
{ void input(struct Yearmonthday *p1);
void output(struct Yearmonthday *p1);
int leapyear(struct Yearmonthday *p1);
struct Yearmonthday ymd,*p=&ymd;
input(p);
output(p);
return 0;
}

void input(struct Yearmonthday *p1)
{ printf("请输入年,月,日:");
scanf("%d,%d,%d",&p1->year,&p1->month,&p1->day);
}

void output(struct Yearmonthday *p1)
{ int MonthDay[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int dsum=0,leap,i;
leap=leapyear(p1);
if(leap==1)
MonthDay[2]=29;
p1->month=p1->month-1;
for(i=1;i<=p1->month;i++)
dsum=dsum+MonthDay[i];
dsum=dsum+p1->day;
printf("天数为:%d\n",dsum);
}

int leapyear(struct Yearmonthday *p1)
{ int leap;
if((p1->year%4==0&&p1->year%100!=0)||(p1->year%400==0))
leap=1;
else
leap=0;
return(leap);
}
展开
 我来答
kaixingui2012
2015-09-19 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6454万
展开全部

C语言中,所有的变量都存储在内存中,可以通过&运算符获得变量的内存地址,函数调用时,只需要把普通变量前加上&符号,就可以达到传递变量地址的目的。

例如:

定义一个结构体类型

struct Yearmonthday

    int year, month, day;
};

定义相关函数,参数类型指定为结构体类型指针

void input(struct Yearmonthday *p1) //函数形参p1是结构体指针类型
{
    printf("请输入年,月,日:");
    scanf("%d,%d,%d",&p1->year,&p1->month,&p1->day);
}

主函数中定义一个结构体变量,调用相关函数,传递变量地址

int main()

    struct Yearmonthday ymd;
    input(&ymd); //传递变量地址,以便带回数据
    printf("date=%d/%d/%d\n", ymd.year, ymd.month, ymd.day ); //输出结果
    return 0;
}
也许是个人
2012-07-11
知道答主
回答量:1
采纳率:0%
帮助的人:1609
展开全部
以指向结构体变量的指针作为形参struct 结构提名 *指针
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-07-09
展开全部
结构就是个类型,跟普通类型用法没有任何区别,别被吓到了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-07-09
展开全部
你可以用取引用符的格式作为形参
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lifengshun1980
2012-07-09 · 超过21用户采纳过TA的回答
知道答主
回答量:103
采纳率:0%
帮助的人:37.7万
展开全部
*p=&ymd;

这句应是
p=&ymd;
追问
现在以指向结构体变量的指针为形参时形参为:struct Yearmonthday *p1。这个没有问题。那么以结构体变量的地址为形参时形参应是什么?
追答
是地址。*P,是指向地址的数据,你要传地址过去,只能用P=&ymd
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式