首先,这两者有什么不同:
(1) const char*
(2) char const*
(3) const char const*我相当确定我完全理解这一点,但我希望有人给我每一句话,特别是,这样它就会留在我的脑海里。这是我可以接受的事情之一,直到有人把我放在现场,然后它变得模糊!
此外,编译器如何存储字符串字面值?这不是家庭作业,我只是温习一下C语言,以防有人关心。
发布于 2011-07-28 05:28:35
1和2等效,并指定指向常量char的指针类型。指针本身不是const。3无效,因为它重复"const“。这就像在说const const int。顺序是不相关的,所以它也像是在说int const int。
在C99中,像这样重复const是有效的。但在C++中,您不能重复此操作。
此外,编译器如何存储字符串字面值?
它们以一种未指定的方式存储。但是允许编译器将它们存储在程序的只读部分。因此,您不能写入字符串文字。您可以保证它们在整个程序生命周期内都保持分配状态(换句话说,它们具有静态存储持续时间)。
这不是作业,我只是为了面试温习一下C语言,以防有人关心。
你应该意识到C和C++之间的细微差别。如上所述,在C99中,允许使用const const int。在C89和C++中,这是被禁止的。但是,在C++中,如果应用于本身为const的类型定义,则可以引入冗余的const:
typedef int const cint;
cint const a = 0; // this const is redundant!模板参数也是如此。
发布于 2011-07-28 05:30:54
(1) const char*
(2) char const* 这是一个指向不能更改的字符(或多个字符)的指针(可以更改)。换句话说,所有的字符串文字。
(3) const char const*这是双倍的。我想你想要的是第三个位置:
(4) const char * const它是一个不能更改的指针,指向一个不能更改的字符(或多个字符)。您可以将其用于指向不应意外更改的文字的全局指针。
字符串文字将(最有可能)集中在代码后面,通常位于称为"rodata“的段或部分中。
发布于 2011-07-28 05:52:48
这里有相当多的正确答案,但你可能会发现很难记住,这里有一个记住这个的诀窍:
1>当const在*的左侧时,表示指针指向一个常量对象;
例如,const int * p表示不能通过指针p更改int
2>当const在*的右侧时,表示指针是const指针;
例如,int * const p表示p是一个不能改变的常量指针。
顺便说一句,如果你在*的两边都有const,那么就意味着它是一个const指针,你不能通过这个指针来改变对象。
例如int const * const p
https://stackoverflow.com/questions/6851436
复制相似问题