我的一位同事在ANSI C中与const有点相似,我想知道你们对它的想法。他写这样的东西,例如:
在一个变量声明中有多个常量
const uint8* const pt_data
我明白,他与这是怎么回事,但对我来说它使阅读和可维护性很难与所有这些常量无处不在。
我的一位同事在ANSI C中与const有点相似,我想知道你们对它的想法。他写这样的东西,例如:
在一个变量声明中有多个常量
const uint8* const pt_data
我明白,他与这是怎么回事,但对我来说它使阅读和可维护性很难与所有这些常量无处不在。
这是一个const
指向const
数据的指针。
const
防止*pt_data = 10;
const
防止pt_data = stuff;
看起来它可以是相当合理的。
它是一个常量指针,指向一个常量数据。
这意味着你不能改变数据(其地址为pt_data
存储),也不能改变指针(pt_data
)指向其他地址(其他地址)。
他可能需要这种方式。
const
总是指其右边的字,除非它是在该行,它指的是项目本身的结束(在高级语言)
const char* str; //This is a pointer to read-only char data
//Read as to (const char)* str;
//Thus :
// *str = 'a';
//Is forbidden
char* const str; //This is a read-only pointer to a char data
//Read as char* (const str);
//Thus :
// str = &a;
//Is forbidden
const char* const str; //This is a read-only pointer to read-only char data
//Read as (const char)* (const str);
//Thus :
// str = &a
// and
// *str = 'a';
//Is forbidden
你应该总是初始化这些指示它们时的指针(除非它们是参数)
const
关键字非常适合确保某些内容不会被修改,并且还会告诉它不应该被修改的开发者。例如int strlen(const char* str)
告诉你在你的字符串中的数据不会被修改。
如果从变量名开始,逆时针转动,pt_data
是const
指向uint8
的指针,它是const
。
请参见下面的原油ASCII图片:
,--------------------------------. | | | ,------------------------. | | | | | | | ,------------------. | | | | | | | | | | | ,-----------. | | | | | | | | | | | const uint8 * const pt_data; | | | | | | | | | | | | | | | `-----' | | | | | | | | | | | `-------------' | | | | | | | `--------------------' | | | `--------------------------'
自从我在一个旧的C的书很多年前看到这个方案,它帮助我理解复杂的声明。
这是大卫·安德森[顺时针或螺旋规则(http://c-faq.com/decl/spiral.anderson.html)。 – 2012-02-02 11:05:38
@Als看来我的方向错了,但至少现在我有地方点描述它时。谢谢! :) – 2012-02-02 11:17:06
对此有疑问?本网站不是为了表达您的意见,而是为了获得客观的问题答案。 – interjay 2012-02-02 09:04:46
感谢您的输入...在 – Leo 2012-02-02 09:10:41
下回答的问题您的同事是否在头文件和实现中都这样做? – 2012-02-02 09:28:55