看C++ Primer,其中有段关于typedef的不是很明白.

021850524 2005-01-29 04:23:54
(C++ Primer第三版104页)
下面是一个几乎所有人开始时都会答错的问题,错误在于将typedef当做宏扩展.已知下面的typedef:
typedef char *cstring;
在以下的声明中,cstr的类型是什么?
extern const cstring cstr;
第一个回答差不多都是:
const char *cstr;
即指向const字符的指针.但是,这是不正确的.const修饰cstr的类型.cstr是一个指针,因此,这个定义声明了cstr是一个指向字符的const指针.
char *const cstr;
========================================================
怎么看都没明白,感觉有些晦涩.请大家帮忙解释解释.
...全文
173 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
021850524 2005-01-30
  • 打赏
  • 举报
回复
谢谢 CMyMfc(星际人生:=E.F=FlyForEver) 精彩的解释,可是似乎和我问的不大一样.

谢谢 pigja(朱健安) 我大概明白了些.是不是说typedef过来的名字,可以把它当成个基本数据类型,
const cstring cstr;这句话中的const和cstring是共同修饰cstr的.
zhengwei1984222 2005-01-29
  • 打赏
  • 举报
回复
确实容易犯错
melonliu 2005-01-29
  • 打赏
  • 举报
回复
to zju3020912063() :
你用的是什么编译器哦,这么强悍……

pigja(朱健安) 和CMyMfc(星际人生:=E.F=FlyForEver)的解答已经很详细咯
lw1a2 2005-01-29
  • 打赏
  • 举报
回复
这样看:
typedef char* cstring;
似乎更容易理解。

cstring是char*类型的助记符。

我刚看了,^_^
pigja 2005-01-29
  • 打赏
  • 举报
回复
typedef的作用是定义新的数据类型。
当你定义了新的数据类型后,它跟基本数据类型的性质是一致的。
也就是说:
typedef char *cstring;
那么,cstring的性质其实跟int没什么区别。
所以const cstring cstr;指的是cstr是const类型,这里你根本不需要知道cstring是不是指针类型。而且cstring const cstr;也是指cstr是const类型。
就象const int i;和int const i;都是指i是const类型一样。
zju3020912063 2005-01-29
  • 打赏
  • 举报
回复
这种题真是没意识,编译器一定能找出使用错误的,费脑筋想这干吗。
CMyMfc 2005-01-29
  • 打赏
  • 举报
回复
const char *cstr; cstr指向的字符串的值不能改变, 如*cstr = 'a';是非法的
char *const cstr; cstr不能改变, 如cstr = buf;是非法的

64,663

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧