【问题标题】:C++ pointer notationC++ 指针表示法
【发布时间】:2019-02-05 13:52:45
【问题描述】:

所以我现在正在学习 C++,我刚开始接触指针,我认为我会很好地理解语义,直到我在我正在学习的书中的练习的推荐解决方案之一中看到这一点:

const char* sa = * ( static_cast < const char* const* > (a));

除了类型参数中的const*,我了解所有内容。为什么会在那里,它有什么作用?

编辑:更正不清楚的表述

【问题讨论】:

  • 你的书在这些代码 sn-p 之前的章节中没有解释吗?
  • 你需要包含a的声明。
  • const char* const* 是一个指向常量的指针,该指针指向一个常量 char。当我说“常量指针”时,它意味着指针本身是常量,不能更改。
  • @AlgirdasPreidžius 不,这是其中一项练习的推荐解决方案之一
  • @Someprogrammerdude 哦,不明白,非常感谢!

标签: c++ pointers semantics


【解决方案1】:

类型中的*表示该类型是指向星号左侧类型的指针。

const in a type 表示const 左边的类型是常量。对于一个对象,const 表示该值不能被修改。对于引用,const 表示不能通过引用修改对象。

char 是一种表示整数编码的窄字符对象的类型。

const char 是一个常量 char

const char* 是指向const char 的指针。

const char* const 是一个const 指向const char 的指针。

const char* const* 是指向const char* const 的指针。


注意指针是间接的:

* ( static_cast < const char* const* > (a));
^ indirection operator

当指针被间接引用时,结果是指向对象的引用(左值)。如果 const char* 是间接的,则生成的左值将具有 const char 类型。显然这样的左值不能用于初始化对象const char* sa

const char* const* 被间接引用时,结果将是对const char* const 类型对象的引用(左值)。该值可用于初始化const char* sa


一个没有强制转换的更简单的例子:

const char c;               // c cannot be modified
const char* const a = &c;   // a points to charcter object c
                            // a cannot be modified
const char* sa = *a;        // sa points to a as well
sa = nullptr;               // sa can be modified; it no longer points to a

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-07
    • 2011-09-18
    • 2020-06-14
    • 2015-08-23
    • 2011-05-30
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    相关资源
    最近更新 更多