这道C语言题怎样解?

来源:百度知道 编辑:UC知道 时间:2024/05/20 14:30:35
假如有如下定义:struct a{int m;float k;}data,*p;若要使P指向data中的成员n,正确的赋值语句是:A)p=&data.n;
B) *p=data.n;
C) p=(struct a *)&data.n;
D) p=(struct a *)data.n;
还有下面的一道题:若有以下定义和语句:
struct a
{int n,m;};
struct a st[3]={{1,20},{2,19},{3,21}};
struct a *p=st;
则以下错误的引用是A)(p++)->n;
B)st[0].n;
C)(*p).n;
D)p=&st.m;

1,C
原因是:*p是结构体,而 data中的n是int形的,p要指向n,那么赋值语句两边的类型要一致.
这就必须进行强制转换.p是存储n的地址,右边必须是n地址,而data.n不是地址. (struct a*)是用来强制类型转换的.所以"类型一致又要p存储的是n的地址",那么,只有C了.

2,D
*P和st[i]引用成员时,用成员运算符"."
而对于*p中的p, p引用成员时,用运算符"->"
而D的正确表达应该如:p=&st[0].m;等.
D错!

第二题选D,正确引用应该是p=&st[0].m

1.C
2.D