C语言结构体指针问题
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.
“.”为结构体成员运算符,在所有运算符中级别最高,其用法如:结构体变量名 . 成员名。别的用法没见过。