C语言结构体指针,解释说明一下为什么

来源:百度知道 编辑:UC知道 时间:2024/06/08 17:53:19
对于以下的变量定义,表达式______不符合C语言语法。

struct node {

int len;

char *pk;

} x = {2, "right"}, *p = &x;

A、p->pk B、*p.pk C、*p->pk D、*x.pk

很显然,A和C是互斥的
因为p是指针,用指针访问成员变量,要用"->"所C错误。
b是正确的,这个没什么为什么。
至于D,因为pk成员是指针变量,所以x.pk是指针,所以*x.pk就是正确的。

C不符合
*p->pk // *p是解引用,为node对象,对象是不能用->来引用成员的

其他的都对。

//上面是我早期的答案,我不得不感叹几句:

cwc_2009的回答正确,B不符合,呵呵,这估计又是谭浩强老师的语法题了,考这样的运算符优先级问题,只送给谭老师一句话(考这样的东西有意义么?),我经常是采用括号的方式回避运算符运算优先级的问题,太复杂了,我记不住。

I think C is the best answer

是B不符合,因为"."的优先级比“*”要高,又因为p为结构体指针,所以,p.pk写法是错误的,如果B改成(*p).pk就可以了。其他的选项都是合法的表达式。不信可以测试一下,看哪个选项会通不过编译。