c++基础(类型转换)

作者: zidea | 来源:发表于2019-05-05 12:04 被阅读16次
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

相关文章

  • (六)C++中的类型转换、IO流与STL标准模板库

    C++中的类型转换与STL标准模板库 一、C++类型转换 在C++中类型转换包含 static_cast、cons...

  • C++入门13 -- 类型转换,新特性,异常,智能指针

    类型转换 C语言类型转换:(type)expressionexpression(type) C++语言类型转换:x...

  • [基础]C++:类型转换

    我们常常将不同类型的数据相互转换,但也常常发生错误。当然可以由编译器来帮忙检查。但是,我们认为的一些数据类型转换的...

  • c++基础(类型转换)

    像我的老伙伴 javascript 天生是没有类型系统,只从服用了typescript之后才有了类型系统。像 ja...

  • C++类型转换

    C++类型转换 C++为了规范C中的类型转换,加强类型转换的可视性,引入了四种强制类型转换操作符:static_c...

  • C++ 学习(2) ---- 基本语法介绍

    C++ 基本语法(2) C++基础语法说明模板NA运算符重载NA强制类型转换static_cast,const_c...

  • C++ 重载 Conversion 运算符

    C++ 中类型转换有四种方式: C 风格的转型 C++ 风格的转型 利用构造函数实现内置类型到用户定义类型的转换 ...

  • 数据类型转换

    写在前面 C/C++编程中常见数据类型转换,包括隐式类型转换和显式类型转换。 1. 隐式类型转换 隐式类型转换在以...

  • C++中的类型转换

    C++中的类型转换 显示转换 命名的强制类型转换 static_cast dynamic_cast const_c...

  • C++面经

    1. 语言基础 1.1 C++的四种类型转换: const_cast => 用于将const变量转为非const;...

网友评论

    本文标题:c++基础(类型转换)

    本文链接:https://www.haomeiwen.com/subject/wlfonqtx.html