C ++指针表示法

问题描述 投票:-3回答:1

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

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

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

编辑:纠正不清楚的配方

c++ pointers semantics
1个回答
2
投票

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

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

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

const char是一个const char

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

const char* const是指向constconst 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
© www.soinside.com 2019 - 2024. All rights reserved.