使用typedef时,为什么非const指针被视为const?

typedef char* c; const c ptr1 = "pointer"; ++ptr1; /// error const char* ptr2 = "pointer"; ++ptr2; /// runs fine 

现在ptr1应该是const char*类型,因此是非const指针,那么为什么它被视为常量指针?

他们不一样。

第一个指定const-pointer-to-char,第二个指向const-char指针。

尝试从右到左阅读:

 const char *p; // p is a pointer to char which is const char const *p; // p is a pointer to const char (same as previous) char * const p; // p is a const pointer to char char const * const p; // p is a const pointer to const char 

通过使用typedef typedef char* c您将“指向char的指针”包含在一个别名c

 const cp; // p is a const [c] --> p is a const [pointer to char] 

补充说明:

Typedef不像宏那样就地扩展,即

 const cp; 

真的变成了

 const [char*] p; 

它不会成为

 const char* p; // Nope. 

不要像脑中的宏一样扩展它,使用typedef,你将char*绑定在一起并形成一个primefaces。

ptr1是一个const (char *) ,意思是指针本身是一个const,而ptr2是一个(const char) * ,意味着指针的目标是const。

它与c内部组合的方式有关。 一个typedef不像一个宏,它不仅仅是替代它。如果你在它中使用pus括号,它将会是这样的。

 const (char*) ptr1 = "pointer"; (const char)* ptr2 = "pointer"; 

写得像:

 typedef char* c; c const ptr1 = "pointer"; ++ptr1; /// error char const* ptr2 = "pointer"; ++ptr2; /// runs fine 

使差异更明显,这应该与您的示例相同