C++指针表示法



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

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

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

编辑:更正了不明确的表述

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

类型中的const意味着const左侧的类型是常量。对于对象,const表示不能修改该值。对于引用,const表示不能通过引用修改对象。

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

const char是一个常量char

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

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

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

最新更新