免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1931 | 回复: 3
打印 上一主题 下一主题

typedef语法出错,求教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-20 11:42 |只看该作者 |倒序浏览
小弟看了一段代码,不是很明白出错地方.请高手指教.
typedef char *pstr;
char string[4] = "abc";
const char *p1 = string;
const pstr p2 = string;
p1++;
p2++;

论坛徽章:
0
2 [报告]
发表于 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++;

不知道我说清楚没? 如果不清楚, 大家再交流!

论坛徽章:
0
3 [报告]
发表于 2007-12-20 13:09 |只看该作者
非常清楚,我也受教了

论坛徽章:
0
4 [报告]
发表于 2007-12-21 19:34 |只看该作者
基本上清楚了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP