- 论坛徽章:
- 0
|
不懂const的C专家你见过没?
不管你见没见过,我是见过了。
这是专家的代码
http://www.cnblogs.com/pmer/archive/2011/10/12/2209454.html
- char *month(unsigned);
- int main( void )
- {
- puts( month(10) );
- return 0;
- }
-
- char * month(unsigned m)
- {
- static char * const name[12]
- = {"Jan","Feb","Mar","Apr","May","Jun",
- "Jul","Aug","Sep","Oct","Nov","Dec",};
- return name[m-1];
- }
复制代码 char * const name[12],看出问题没?
这里不加const,最多让人认为不够严谨。
加上const,就明显暴露无知了。
这里const修饰的name, 而非其中的"Jan", "Feb"这些数据。
修饰name几乎无用,这个样子下,const保护数据的效果没达到,例如做个破坏试验,
程序编译时检查不出问题,运行时,则可能立刻奔溃了。- char *p = month(10);
- strcpy(p, "---");
- puts(month(10));
复制代码 正确的做法
- const char *month(unsigned m);
- int main( void )
- {
- puts( month(10) );
- return 0;
- }
-
- const char *month(unsigned m)
- {
- static char const *name[12]
- = {"Jan","Feb","Mar","Apr","May","Jun",
- "Jul","Aug","Sep","Oct","Nov","Dec",};
- return name[m-1];
- }
复制代码 |
|