首页 > 试题广场 >

有以下程序 #include struct S

[单选题]

有以下程序

#include <stdio.h>
struct S {
    int a;
    int b;
};
signed main() {
    struct S a, *p = &a;
    a.a = 99;
    printf("%d\n",  ____);
}


程序要求输出结构体中成员a的数据,以下不能填入横线处的内容是?

  • a.a
  • *p.a
  • p->a
  • (*p).a
这里一定要区分.运算符与->运算符的区别。
.运算符是类成员访问运算符,->是指针对象访问成员时用的访问运算符。
*p.a,因为.的优先级比*的优先级高,故上面的表达方式不对,程序将报错。
发表于 2016-05-24 16:52:06 回复(0)
单目运算符的计算顺序是从右至左,显然 *p.a等同于*(p.a),编译器直接报错!

这个题目明显选B
发表于 2015-04-30 22:03:08 回复(2)
struct S a, *p = &a;   #定义一个结构体对象a,同时定义一个指向结构体对象a的指针变量p。
  • p->a :表示p当前指向的是对象a中的a成员。
  • (*p).a  :  也是对象a中的成员a,因为(*p)就是对象a。从(*p).a 表示是对象a下的成员a。
  • *p.a  :  由于.的优先级大于*,因此这个表达方式等同于*(p.a),显然表达式错误的。
发表于 2018-12-06 10:56:19 回复(2)
本题考查结构体变量的引用,题目中要求输出结构体中成员a的数据,p为指针,* p为结构体变量,那么 * p.a可以表示为结构体中成员a的数据。
编辑于 2021-08-19 18:23:20 回复(5)
struct S a, *p = &a;   #定义一个结构体对象a,同时定义一个指向结构体对象a的指针变量p。 p->a :表示p当前指向的是对象a中的a成员。 (*p).a  :  也是对象a中的成员a,因为(*p)就是对象a。从(*p).a 表示是对象a下的成员a。 *p.a  :  由于.的优先级大于*,因此这个表达方式等同于*(p.a),显然表达式错误的。
发表于 2020-06-22 01:22:44 回复(0)
struct S a, *p=&a的意思是定义一个结构体对象a,和指向 结构体 对象a的指针变量p.
p - > a表示p当前指向的对象a中的a(成员),(*p).a也是对象a中的成员a,因为(*p)就是对象a.
对于*p.a,因为.的优先级比*的优先级高,等同于*(p.a),所以B不对.

编辑于 2017-03-15 20:48:35 回复(0)
发表于 2020-04-11 12:35:38 回复(0)
正确答案应该是B, .的优先级比*高. 编译器报错.
发表于 2015-03-14 14:25:19 回复(0)
在C/C++中,"." 运算符的优先级高于 "*" 运算符。因此,在B选项中的表达式 "*p.a" 会被解析为先访问指针p的成员a,然后再对其进行解引用操作,这是错误的语法。
发表于 2023-10-19 17:15:07 回复(0)
此题正确答案应该是B
发表于 2015-04-29 14:28:06 回复(0)
.优先级高为什么报错
发表于 2023-07-05 23:36:18 回复(0)
.的优先级大于*
发表于 2022-03-28 22:33:19 回复(0)
*p.a 等价于*(p.a) 编译器报错
发表于 2021-07-23 10:01:13 回复(0)

.的优先级比*高

发表于 2021-02-09 00:26:49 回复(0)
运算符优先级的问题
发表于 2018-05-09 15:14:06 回复(0)
点.运算符运算优先级比*指针运算符等级要高
发表于 2018-01-19 19:39:09 回复(0)
"."的优先级比"*"更高,所以需要加上()
发表于 2017-08-06 11:06:54 回复(0)
运算符的优先级
发表于 2016-03-15 20:37:27 回复(0)
gm头像 gm
 b
发表于 2015-10-26 12:42:18 回复(0)
‘.’前面是结构体类型,‘->’前面是指向结构体的指针。
发表于 2015-10-16 22:12:25 回复(0)