zoukankan      html  css  js  c++  java
  • [001]const和指针

    很经典的:

    const int* p;
    
    int* const p;

    前者表示指针指向的值是const,指向的值不可变,但是指针本身是可变的;后者表示改指针是const,指针不可变,但是指向的值是可变的。

    写个代码就是:

    const int* p = &a;
    *p = 123;                // Error
    p = &b;                    //OK
    
    int* const p = &a;
    *p = 123;                // OK
    p = &b;                    // Error

    ------------------------------------------------------------------------------------------------

    看了上面都会觉得const和指针的关系了解的差不多了,但是,其实并不是这样的。

    如果有以下的定义,那么s是什么类型呢?

    typedef string *pString;
    const pString s;

    很多人都会回答成:const pString是一种指针,指向string类型的const对象,其实错了。

    声明const pString的时候,const修饰的是pString类型,这是一个指针,因此,该声明语句是把s定义为指向string类型对象的const指针,即

    string* const s;

     那么我们再变态一点,弄个下面的定义呢?

    pString const s1;

    这个时候的s1是什么呢?

    其实这个时候,完全可以把pString看成是一个类型,就像是下面的代码,根本没有什么区别!

    const int a;
    int const a;

    所以,s1的类型和s是一样的。

  • 相关阅读:
    ZOJ 1001 A + B Problem
    献给那些心软的人!!
    将表格的数据插入另一个表格
    把链接 显示为方框
    【ibus】设置ibus输入法(pinyin & sunpinyin)
    [Mongo] How to Install Mongo on Debian(不要安装)
    [Sinatra、Mongo] Mongo
    Sinatra+SQLite3+DataMapper
    [sinatra] Sinatra再入门
    [slim] Slim
  • 原文地址:https://www.cnblogs.com/hustcser/p/3620909.html
Copyright © 2011-2022 走看看