关闭

typedef用法注意事项

541人阅读 评论(0) 收藏 举报
 
  1. #include <iostream.h>
  2.  int main(void)
  3. {
  4.       int i = 20;
  5.       typedef int *myint;
  6.       const myint mintval = &i;
  7.       cout<<*mintval;
  8.       return 0;
  9. }//运行结果显示为 20

如果将typedef看成宏展开,即
        const myint mint ==► const int* mintval 
//mintval是指向const int的指针
那么也就说mintval指向的int对象的值是不能改变的。
修改代码如下验证这种假设:

    1. #include <iostream.h>
    2.  int main(void)
    3. {
    4.       int i = 20;
    5.       typedef int *myint;
    6.       const myint mintval = &i;
    7.       (*mintval)++;
    8.       cout<<*mintval;
    9.       return 0;
    10. }//运行结果显示为 21

这段代码不但编译通过,并且运行的结果也显示mintval所指向的int对象i被修改了。
这也就是说mintval的类型不是指向const int的指针。

实际上关于const myint mintval的含义应该这样看:
const修饰mintval的类型, 而mintval是一个指向int的指针,
所以const myint mintval表示mintval是指向int的const指针。

修改代码如下验证上述结论:

  1. #include <iostream.h>
  2.  int main(void)
  3. {
  4.       int i = 20;
  5.       int i2 = 30;
  6.       typedef int *myint;
  7.       const myint mintval = &i;
  8.       mintval = &i2;   //编译错误:error C2166: l-value specifies const object
  9.       cout<<*mintval;
  10.       return 0;
  11. }//无法运行

上述结果表明mintval是指向int的const指针的结论是正确的

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:57059次
    • 积分:1065
    • 等级:
    • 排名:千里之外
    • 原创:50篇
    • 转载:3篇
    • 译文:0篇
    • 评论:8条
    文章分类
    最新评论