Chinaunix

标题: typedef语法出错,求教 [打印本页]

作者: hufubin    时间: 2007-12-20 11:42
标题: typedef语法出错,求教
小弟看了一段代码,不是很明白出错地方.请高手指教.
typedef char *pstr;
char string[4] = "abc";
const char *p1 = string;
const pstr p2 = string;
p1++;
p2++;
作者: scutan    时间: 2007-12-20 12:41
按C++ Primer上的说法, 这是很多人最开始碰到时都会答错的问题. 我也是的.

其实是这样子的, 错误的原因就在于简单地将typedef当成宏替换了. 即:
typedef char *pstr;
const pstr p2 = string; -->  const char * p2 = string;
如果这样来看, 那么就是说此时指向的是常量, 但是实际上并不是这样, 并不是简单地替换, 此处的const修饰的是p2, 也就是说这个指针为常量, 它不能变.
那么为什么此处修饰的是p2呢?
按照标准来说typedef虽然不引入一个新的类型, 但是此时可以将typedef char * pstr的 pstr看成是char*的一个整体. 此时定义
pstr p1, p2; 那么这两个都为char*类型. (其实不规范地说就可以将pstr看成是一种类型, 不过这种类型为char*).
然后对于你上面的pstr p2来说, p2为一个char*类型, 也就是一个指针类型. 然后你再在前面加上一个const来修饰它, 也就是说此时修饰的是这个指针类型, 即const修饰的是(char*)这个整体, 所以说此时的p2本身看成是一个常量.
如果你想实现你之前想要的那种功能就这样:
typedef const char* cpstr;
cpstr p2 = string;
p2++;

不知道我说清楚没? 如果不清楚, 大家再交流!
作者: hijohnny    时间: 2007-12-20 13:09
非常清楚,我也受教了
作者: alaulong    时间: 2007-12-21 19:34
基本上清楚了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2