美文网首页
C++11 指针类型与赋值

C++11 指针类型与赋值

作者: 顽强的猫尾草 | 来源:发表于2019-03-03 09:53 被阅读0次

不能用类型不匹配的指针来完成赋值,如下代码是错的:

int i = 0;
double *dp = &i;    // 非法,类型不匹配

但是 void* 可用于存放任意对象的地址:

int i = 42;
void *p = &i;    // 合法

还有特殊字面值 nullptr,可以转换成任意其它的指针类型,用来判断指针是否指向了一个合法的对象。

如果一定要完成指针的类型转换,可以使用 C++11 的几种强制类型转换:

  1. 指针类型转换 (reinterpret_cast)
int *pint = 1;
char *pch = reinterpret_cast<char *>(pint);
  1. 涉及到 const 的指针类型转换 (const_cast)
const int num[5] = { 1,2,3,4,5 };
const int *p = num;
int *pint = const_cast<int *>(p);
  1. 子类指针转化为父类指针 (dynamic_cast)
class man {
public:
    int name;
    // 加上 virtual 关键字, 可以使得父类用子类初始化后可以调用子类的函数
    virtual void run() {
        cout << "man is running" << endl;
    }
};

class son : public man {
public:
    void run() {
        cout << "son is running" << endl;
    }
};

void main()
{
    man *pman = new man;
    son *pson = new son;
    //子类指针转换为父类指针, 但是还是调用子类的函数
    man *pfu = dynamic_cast<man *>(pson);
    pfu->run();
}

相关文章

  • C++11 指针类型与赋值

    不能用类型不匹配的指针来完成赋值,如下代码是错的: 但是 void* 可用于存放任意对象的地址: 还有特殊字面值 ...

  • C语言的指针(进阶篇章之一)

    指针运算 切记一点就是:指针的运算包括数值和类型。 一、赋值运算 在进行指针的赋值运算时,要注意的是不同类型指针虽...

  • C void,extern ,sizeof

    不存在void类型的变量,但有void的类型的指针。 void类型指针 只有相同类型的指针才可以相互赋值。 voi...

  • 现代 C++:一文读懂智能指针

    智能指针 C++11 引入了 3 个智能指针类型: std::unique_ptr :独占资源所有权的指针。...

  • JS变量类型和计算

    变量类型 1.值类型 (赋值之间不会相互影响) 2.引用类型 :对象,数组,函数 (赋值是变量指针,不是真正的...

  • 《Java编程思想》读后总结(二)

    Java里的数据类型 Java里的对象是引用,就像C的指针。对引用的赋值实际就是对指针的赋值,对象本身并没有被赋值...

  • c基础—指针运算和函数指针

    二级指针 数组和数组指针 采用指针遍历数组循环赋值 遍历 赋值 指针与数组的几种写法 函数指针(回调) 题目:监听...

  • Dart中的多态

    允许将子类类型的指针赋值给父类类型的指针,同一个函数调用会有不同的执行效果。 子类的实例赋值给父类引用 多态就是父...

  • 10.3 指针和数组

    关于指针的赋值 指针加1,指针的值递增它所指向类型的大小(以字节为单位)。其中int/float ...

  • 第一章 c++过程化编程

    学习内容: 命名空间 指针与动态分配内存 引用与指针传参、返回指针、递归、函数默认值、重载的使用 掌握C++11的...

网友评论

      本文标题:C++11 指针类型与赋值

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