MonkeyKing-空 2022-10-02 22:32 采纳率: 0%
浏览 44

面向对象编程问题求解答

问题遇到的现象和发生背景

c语言面向对象编程,强制把ip1中p的地址赋值给a

用代码块功能插入代码,请勿粘贴截图

#include"Mobile.h"
#include<stdio.h>
class oss{
private:
char *p;
public:
//oss();
void mass();
};

void oss::mass(){
p=new (char);
printf("%p\n",p);
*p='a';
printf("%c\n",p);
};
int main()
{
oss ip;
oss ip1;
ip1.mass();
ip.mass();
char a;
a=(char
)0x02250730;//强制给
a,ip1的地址
printf("%c",*a);
printf("%p\n",a);
}

运行结果及报错内容

到了该打印a的值的时候就直接跳出运行了,但是可以输出a的地址

我的解答思路和尝试过的方法

我感觉是面向对象的封装性导致的

我想要达到的结果

为什么会跳出运行了?到底是不是封装性导致的?

  • 写回答

1条回答 默认 最新

  • X-道至简 2022-10-03 10:24
    关注

    char a;
    a=(char)0x02250730;//强制给a,ip1的地址
    printf("%c",*a);

    这3句话有问题:

    1. a不是指针
    2. 强制给a,ip1的地址 这个是char类型,会被截断一个字节,并且每次运行的时候地址有可能有变化。 还有ip1是一个对象不能这样给
    3. printf("%c",*a); *a去取内容的时候会导致非法访问

    这样改看是否可行

    1. 对于oss对象加一个方法获取p指针
    2. char a; 改成 char *a;
    3. a=(char)0x02250730; 改成 a = ip1.get_p(); 假如get_p是获取oss p的值
    评论

报告相同问题?

问题事件

  • 创建了问题 10月2日