首页 > 试题广场 >

括号处应填写()。

[单选题]
空格处应填写()。
#include <iostream>
using namespace std;

class A
{
    public:
        int m;
        int* p;
};

int main()
{
    A s;
    s.m = 10;
    cout<<s.m<<endl; //10
    s.p = &s.m;
    () = 5;
    cout<<s.m<<endl; //5
    return 0;
} 


  • s.p = 5
  • s->p = 5
  • s.*p = 5
  • *s.p = 5

本地codeblocks亲测
编辑于 2016-11-01 23:26:56 回复(2)
题意很不明确,p是指向类X的成员m的指针,这句话没有说明指针p是类X的成员变量,还是在类的外部指向m。
假设,p是类X的成员,那么该写成  *s.p = 5;//没问题 
如果p不是类X的成员,那么写为 s.*p = 5; //按下面的代码测试出错

class X 

{

public:

int m;

}

void main()

{

X s;

int *p = &(s.m); //不确定在类X外面指向m的指针,是不是这样表达的?

s.*p = 5; //vs2010报错: “.*”: 非法,右操作数包含“int *”类型

}
欢迎指正!
发表于 2015-10-04 23:40:05 回复(1)
这题 出的 有任何意义吗 ?
发表于 2015-07-13 16:39:26 回复(0)
.的运算符优先级比*要高,*s.p=*(s.p)。
发表于 2017-03-30 08:32:13 回复(0)
选D很好理解是因为运算符的优先级,后缀运算符.高于解引用运算符*,重点解释一下为什么不能选B、C。
B、C看起来似乎很对,但他们的调用对象必须是类对象的指针,而不能是类对象。
发表于 2018-04-28 21:42:30 回复(2)
运算符优先级最高的一组:
点、括号、箭头
.  ::
()[]
->
记住了吗

发表于 2017-08-28 20:26:17 回复(2)
成员指针访问运算符  ,通过对象(. * )或指针(   ->*  )获取成员 C++ Primer: 740 获取数据成员的两种方式:   auto p=&类名::数据成员名;//得到指向数据成员的指针,然后  auto data=类的对象. *p;  得到类的成员;此方法必须声明为类的友元或者是类的成员  在类的成员函数里边返回类的数据成员的指针,通过调用成员函数得到数据成员的常量指针;//通过类的成员函数返回数据成员的指针 本题类的所有成员都是公有的,所以无须是友元或类成员都能访问,所以觉得c也是正确的。 希望高手指正!
发表于 2016-12-04 14:02:36 回复(2)
要始终记得变量是p,而不是*p,数据类型才是*p
发表于 2016-04-27 09:54:11 回复(0)
成员运算符.优先级比解引用*优先级高
发表于 2022-03-05 13:57:51 回复(0)
.的运算符优先级比*要高,*s.p=*(s.p)。 ->;是指针指向其成员的运算符 .是结构体的成员运算符
编辑于 2018-11-29 17:04:17 回复(0)
对象s的成员变量s.p是指向其成员变量s.m的指针变量,所以*s.p跟s.m是等价的,由题意知通过执行第17行代码,s.m的值变成了5,所以第17行应该填上*s.p=5,选D。
编辑于 2016-07-14 09:22:32 回复(0)
->是指针指向其成员的运算符
.是结构体的成员运算符
发表于 2016-05-22 19:33:08 回复(0)
直接用*p赋值不就好了?
另外,s.*p 和 *s.p 在VS2010都不能编译通过,有大神编译通过的发个图好么
貌似这个题写的这些表达式本身就是错的
发表于 2015-09-13 14:57:33 回复(1)
看清题意,p不是类X的成员,是一个外部变量指向s里面的一个成员变量,所以必须用*p来访问s的成员变量,然后再修改。D选项,p必须是s的成员变量

发表于 2015-08-31 17:41:58 回复(0)
答案是D,为什么错了?
先执行.然后执行*
估计没搞懂执行的顺序
发表于 2014-11-17 20:15:49 回复(3)
A s.p 表示的是地址,不能用常量给他赋值。

B s不是指针变量  不能使用-> 即使s是指针变量s->p 表示的是地址,不能用常量给他赋值。

C 写法错误 即使s定义为指针也不行,p是类的成员变量 类型为int *

D *s.p表示的是指针 所指向变量的内容为int数据 正确
发表于 2021-09-28 09:20:08 回复(0)
s变量并不是指向类A实例的指针,所以->是错误的
发表于 2018-10-07 09:14:44 回复(0)
对指针取*表示地址的解引用
发表于 2025-03-16 18:26:36 回复(0)
查了一下GPT,以下是对GPT的总结(如果有问题请说一下~):
首先 .* 符号用于通过成员指针访问类成员的特殊操作符。
接下来明确一下什么是成员指针以及怎么用.*:
    class MyClass{
    public:
        int x;
    }
    int main(){
    int MyClass::*ptrX = &MyClass::x;// 创建一个指向x成员的成员指针
    MyClass obj;
    obj.*ptrX=20;
    ...
    }
ptrX为成员指针,成员指针(成员指针变量)可以用于访问任何一个对象的成员变量,而不局限于特定的对象。成员指针存储了成员变量的地址和类型信息,它们允许在运行时指定要访问的对象,并访问对象的成员变量。
发表于 2023-10-04 00:25:11 回复(0)
s.*p 报错:未定义标识符"p"
发表于 2019-05-27 12:25:35 回复(0)