zoukankan      html  css  js  c++  java
  • define与typedef的区别

    define:

      发生在预处理阶段,也就是编译之前,仅仅文本替换,不做任何的类型检查

      没有作用域的限制

    typedef:

      多用于简化复杂的类型声明,比如函数指针声明:typedef bool (*funcPoiinter) (int, double);

      给已有类型定义一个别名(类似的 引用是给已有对象或者变量一个别名)

      在编译阶段有效,具有类型检查的功能

      定义域平台无关的数据类型。比如:size_t

      有自己的作用域(函数内定义只能函数内部使用)

      对指针的修饰作用不同:

      

    typedef int * pint;
    #define PINT int *
    int i1 = 1, i2 = 2;
    const PINT p1 = &i1;//p可以更改,p指向的内容不可以更改,相当于const int *p 或 int const *p;
    const pint p2 = &i2;//p不可以更改, p指向的内容可以更改,相当于int *const p; 
    pint s1, s2;
    PINT s3, s4;
    
    void testPointer()
    {
        cout<<"p1:"<<p1<<"  *p1:"<<*p1<<endl;
        p1 = &i2;
        //*p1 = 3; 报错
        cout<<"p1:"<<p1<<"  *p1:"<<*p1<<endl;
        //p2 = &i1; 报错
        *p2 = 3;
        cout<<"p2:"<<p2<<"  *p2:"<<*p2<<endl;
    }

      ps:关于Const的修饰原则:从左至右,依次结合,const就近结合。在另一篇博文中。

  • 相关阅读:
    ZOJ 1234 Chopsticks
    ZOJ1238 Guess the Number
    ZOJ 1243 URLs
    IP地址的分类
    可变字符串NSMutableString(ios)
    Object-C 声明属性为什么用下划线
    @property的属性weak nonatomic strong等介绍(ios)
    super self的区别(ios)
    iOS概述
    多态
  • 原文地址:https://www.cnblogs.com/luntai/p/6061463.html
Copyright © 2011-2022 走看看