首先,有什么区别:
(1) const char* (2) char const* (3) const char const*
我相当肯定我完全理解了这一点,但是我想让某人给我一个句子,具体来说就是粘在我的脑海里.这是其中一件事,我很好,直到有人把我当场,然后它变得模糊!
另外,编译器如何存储string-literall?这不是家庭作业,我只是在C上刷新面试,以防任何人关心.
解决方法
1和2是等价的,并指定一个指向const char的指针的类型.指针本身不是const. 3是无效的,因为它重复“const”.就像说const const int一样.这个顺序是不相关的,所以也是说int const int.
在C99中,这样重复const就是有效的.但在C中,你不能重复.
Also,how are string-literalls stored by the compiler?
它们以未指定的方式存储.但编译器可以将它们存储在程序的只读部分.所以你不能写字符串文字.您保证在整个程序生命周期内保持分配(换句话说,它们具有静态存储持续时间).
This isn’t homework,I’m just brushing up on C for interviews in case anyone cares.
你应该意识到C和C之间的细微差别.在C99中,如上所述,const const int是允许的.在C89和C中是禁止的.在C中,您可以引入一个冗余的const,如果应用于本身是const的typedef:
typedef int const cint; cint const a = 0; // this const is redundant!
模板参数也是如此.