C语言结构体指针问题

王朝知道·作者佚名  2012-07-04
窄屏简体版  字體: |||超大  
 
分類: 電腦/網絡 >> 程序設計 >> 其他編程語言
 
問題描述:

struct years

{

int year,

month,

day;

}date;

void main()

{

struct years *p1;

p1==&date;

printf("Input the year month and day,plase:");

scanf("%d%d%d",p1.year,p1.month,p1.day);

}

为什么会出错?

当p1=&date后,p1指向了date.

scanf("%d%d%d",&date.year,&date.month,&date.day);

不等价于

scanf("%d%d%d",p1.year,p1.month,p1.day);吗?

为什么还要改成("%d%d%d",&(*p1).year,&(*p1).month,&(*p1).day);

希望给出祥细解答.

參考答案:

anwser1.

scanf("%d%d%d",&date.year,&date.month,&date.day);

不等价于

scanf("%d%d%d",p1.year,p1.month,p1.day);

因为scanf函数的一般形式为scanf(格式控制,地址表列),其中“地址表列”是由若干个地址组成的表列,可以是变量的地址或字符串的首地址。你的代码中p1指向结构体变量data,而*p1等价于data,既*p1.month=data.month,另外&和*两个运算符优先级相同,但按自右向左的方向结合,因此&*p1.month就等价于&(*p1).month,所以上面应该用scanf("%d%d%d",&date.year,&date.month,&date.day); 或者scanf("%d%d%d",&(*p1).year,&(*p1).month,&(*p1).day);

anwser2.

“.”为结构体成员运算符,在所有运算符中级别最高,其用法如:结构体变量名 . 成员名。别的用法没见过。

小贴士:① 若网友所发内容与教科书相悖,请以教科书为准;② 若网友所发内容与科学常识、官方权威机构相悖,请以后者为准;③ 若网友所发内容不正确或者违背公序良俗,右下举报/纠错。
 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航