c++ 是怎么将char字符转化成二进制数字存到内存中的

代码如图:图片说明
本小白刚开始学c++,项目用的固定基址,所以每次exe启动,这些地址都是固定的,运行结果如下图:图片说明
但是,当我打开CE,查找这三个地址内的数据时,发生了疑问,前两个地址,存的int型的数据,读出来的结果分别是,987654321和987,这和我程序内初始化的值一样,很正常。但是第三个地址,显示的值为3435973736。
我知道,所有的数据,或者说变量,编译后都是会转化成二进制数据保存。所以定义的 char s='h';编译后h被转化为数字也是正常的。原本以为是根据ascii码转化,或者utf8转化。结果。。查出来的值是3435973736。
请问各位大神,为什么‘h’的转化结果为3435973736,c++是根据什么规则将字符转化成数字的?

3435973736这个是地址,因为m_i放在堆栈上,所以这个地址指向了堆栈,显然,在程序没有运行的时候,无法确定它是多少,要程序运行调用到了这里才知道。
所以和C++编译器无关。

我来告诉你这是为什么,你把3435973736这个数据转换成16进制int型就知道为什么了,3435973736 = 0xcccc cc68,发现没有?
最后一个字节的 68就是你存储的字符'h'.为什么会这样呢?因为主机默认的初始值不定的,也可能是其他值,但是最后一个字节的68肯定是不会变的,而这里你恰好的内存初始化时默认是cc,其实大部分时候初始值默认都是cc.
而数据是以int类型对齐保存的,电脑的int型为
4个字节,由于你只有一个字节,所以电脑在保存时,高3个字节没有做处理,直接按照初始值保存起来了,这样做是没有问题的。
如果在你取出这个数据的时候,如果以char *指针变量来取,会自动取出这个char型,同时将最低的8位给你,也就是'h'。但是你是通过查看内存的方式来操作的,相当于通过int * 来取内存数据,当然就是0xcccc cc68了啊!

我应该说的够明白了吧!

char s = 'h'
写法s, 表示值, 就是'h'的ascii码
写法&s,表示内存地址,就是存放'h'的内存地址

地址值不是固定的吧,你把编译器关了再打开重新编译或者删除exe编译值应该就不一样了

ASCII码呗