C++基础之访问const变量、访问私有变量and联合体(狗仔队)

来源:互联网 发布:直播那个软件最好 编辑:程序博客网 时间:2024/06/05 16:18

一、访问const变量

const int a = 5;
用const限定,a的值就是5了,不能修改为其他的了,但这也不是绝对的
int *p = &a;*p = 3;
通过指针获取到a的地址可以再内存中修改a的值

修改前内存中a:                                        修改后内存中a:

 

图中看出内存确实被修改了,若是你打印出来,还是没改之前的值,猜测编译器看到const将变量看做是常量,用的是常量的这个数,在没去内存里看了

二、访问私有成员变量

class A{  int a;//默认是私有,问题怎么访问到a给a赋值};
  • 方法一
A *p = new A;int *b = (int *)p;//新建对象的地址放到b里*p = 3;//取b的内容就是a赋值换种写法:int *p = (int *)new A;*p = 3;
  • 方法二
Class B{public:int b;};A *pa = new A;B *Pb = (B*)pa;//A类的指针类型转为B类pb->b = 3;

这里我明白了即使将指针类型强转,但这个指针指向的地方仍然是建这个指针的地方,不过指针拥有了强转类型的特性

  • 方法三
class A{private:int a;};union B{public:int b;//共同体所占内存空间大小:4个字节A c;};int _tmain(int argc, _TCHAR* argv[]){B *p = new B;p->b = 3;
第三种方法比较新颖,用的是联合体,也叫共同体,我也是今天才接触到这个,也是通过这种方法推出第二种方法的

共同体:关键字----union

所占内存大小:成员变量中占内存最大的变量所占内存(共同用一块内存,能存下最大的变量就可以了)

特性:给一个成员变量赋值,会给对应内存的成员变量都赋值(因为大家存在于同一块内存中)

特性举例:共同体成员double、int、char各一,内存,八字节

特性举例2:共同体有int a,int b,内存4,a = 3,同样也赋值为3;(通过这个特性,上面代码中给b赋值也是给a赋了值)

因为可以强转,C++所以是不安全的语言

0 0