c++基础(类型转换)

作者 : 开心源码 本文共1056个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共193人阅读

Cplusplus-tutorial-in-hindi.jpg

像我的老伙伴 javascript 天生是没有类型系统,只从服用了typescript之后才有了类型系统。
像 java 这样静态语言有着自己一套严格的类型系统。不过一旦为变量公告类型也并不是一层不变的。可通过类型转换来实现更改变量的类型。
不过 c++ 可直接访问内存,所在直接不许隐式类型转换,我们可以通过操作和方法内存将内存指向内存地址进行类型转换。

其实我们所谓类型,就是数字进行分类,根据类型分配不同大小内存地址,而后赋予类型肯定的能力和行为。

所以究其底层他就是数值,就是 0 和 1 ,一切都是我们进行笼统的。所以我们只需获取到数据说的他是啥就是啥

#include <iostream>int main(int argc, char const *argv[]){    int a = 5;    double val = a;    std::cin.get();}
int main(){    int a = 50;    double val = *(double *)&a;    std::cout        << val << std::endl;    std::cin.get();}
  • 首先通过 & 对变量 a 进行取址操作返回指向 int 类型的指针。
  • 而后通过double*将指针转换为指向 double 类型的指针
    说以这回输出值是异常的
-1.34546e+163

这个只是为了演示没有什么实际意义

struct Pointer{    int x, y;};int main(){    int a = 50;    double val = *(double *)&a;    Pointer p = {5, 8};    int *arr = &p.x;    std::cout        << arr[0] << " , " << arr[1] << std::endl;    std::cin.get();}

在这个例子中,我们可以定义 struct Pointer ,其中包含两个 int 类型成员 x,y 变量。当我们实例 Pointer 也就是相当分配给 Pointer 一个连续的 8 字节的内存空间。但从数据存放的角度来看也可以看出数组。

    int y = *(int *)((char *)&p + 4);    std::cout << "y = " << y << std::endl;

这里大家可以了解一下,我们将 &p 地址转换为指向 char 类型的地址指针,我们知道 char 类型大小是 1 个字节,所以 + 4 就表示已 char 地址大小进行步进,也就是到了 y 内存地址位置而后再转型为指向 int 类型的指针。最后在取值就可。

struct Pointer{    int x, y;    int *GetPositions()    {        return &x;    }};

titleShadow.png

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » c++基础(类型转换)

发表回复