C++ 指针表示法
C++ pointer notation
所以我现在正在学习 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 char
.
的 const
指针
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
所以我现在正在学习 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 char
.
const
指针
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