虽然问题已经被解决了答案上面,我很想念......的原因
因此,也许作为一个经验法则:
- 的
const
总是指它的前身令牌。
- 如果没有这样的情况,它就是“强制”它的后继标记。
这个规则可以真正帮助你声明一个指向const指针的指针或者其他东西。
无论如何,考虑到这一点,就应该得到清楚为什么
struct Person *const person = NULL;
声明了一个常量指针的可变结构。
想想看,你的typedef “groups”struct Person
与指针标记*
。 所以,写
const PersonRef person = NULL;
你的编译器看到的是这样的(伪代码):
const [struct Person *]person = NULL;
由于没有什么const
的离开,它deklares令牌它是正确的struct Person *
不变。
嗯,我想,这就是为什么我不喜欢通过typedefs隐藏指针,而我喜欢typedefs这样的。那写什么
typedef struct Person { ... } Person;
const Person *person; /*< const person */
Person *const pointer; /*< const pointer to mutable person */
它应该是很清楚的编译器和人类,你在做什么。
“但const关键字不应该使指针为常量。”咦?简短的回答:不要使用typedefs,他们只是在那里混淆你。记住他们,直到你需要他们。 – wildplasser 2011-12-14 12:29:44
@wildplasser:“不要使用typedefs”不是很好的建议。也许“不要隐藏在typedef后面的指针”更合适...... – 2011-12-14 12:32:08
我不同意。它*是一个很好的建议。隐藏typedef后面的结构与隐藏指针一样令人困惑。它只会污染你的精神命名空间。即使没有语法突出显示,我更容易和更快地读“struct person * p”,然后“pPerson p”。 – wildplasser 2011-12-14 12:36:53