typedef:在计算机编程语言中用来为复杂的声明定义简单的别名(给类型起别名,整体类型替换),它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中
语法格式:typedef 类型 别名
  typedef char *String; //给指针类型char *起别名为String(右边替换左边)
  String s1,s2;  //   typedef s1,s2  定义了两个char类型的指针s1,s2
 
#define:宏定义又称为宏代换、宏替换,简称“宏”,可以用#undef取消宏定义的作用
语法格式:#define 别名 类型
  #define String char * ;//将代码里面的所有String都转换成char *
  String s1,s2;  //#define  定义了 一个char类型的指针s1,以及char类型的变量s2       
      
 上面两个定义的格式说明了宏定义与typedef的区别,typedef是整体替换,替换后两个都是char *类型的指针,宏定义是替换一次,只有前面的才是char *类型的指针,后面则是char类型的变量
 
 typedef与指向结构体的指针
  // 定义一个结构体并起别名
  typedef struct{
  float x;
  float y;
  } Point;
  // 定义了一个Point类型的指针并起起别名p1
  typedef Point *p1;

  int main()
  {
  // 定义结构体变量

  Point point = {10, 20}; //此处相当于下面代码
  //  struct {
  //  float x;
  //  float y;
    //  } point = {10, 20};
   
      // 定义指针变量 
      PP p = &point;//此处相当于下面代码
  // Point *P = &point;
   
    // 利用指针变量访问结构体成员
    printf("x=%f,y=%f\n", p->x, p->y);
    return 0;
  }
 
typedef与指向函数的指针
格式:typedef 指针类型(*指针别名)(接受参数类型)
  // 定义一个sum函数,计算a跟b的和
  int sum(int a, int b) {
    int c = a + b;
    printf("%d + %d = %d", a, b, c);
    return c;
  }
  //给函数类型的指针起别名 MySum
  typedef int (*MySum)(int, int);

  int main() {
      // 定义一个指向sum函数的指针变量p
      MySum p = sum;
   
      // 利用指针变量p调用sum函数
      (*p)(4, 5);
   
      return 0;

     }
 

typedef和#define的更多相关文章

  1. typedef 和 #define 的区别

    本文已迁移至: http://www.danfengcao.info/c/c++/2014/02/25/difference-between-define-and-typedef.html typed ...

  2. typedef与#define的区别

    1.  typedef typedef故名思意就是类型定义的意思,但是它并不是定义一个新的类型而是给已有的类型起一个别名,在这一点上与引用的含义类似,引用是变量或对象的别名,而typedef定义的是类 ...

  3. typedef 和define的区别

    总结一下typedef和#define的区别 1.概念 #define 它在编译预处理时进行简单的替换,不作正确性检查.它是预处理指令. typedef 它在自己的作用域内给一个已经存在的类型一个别名 ...

  4. typedef和#define的用法与区别

    typedef和#define的用法与区别 typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程 ...

  5. typedef 与define 的区别

    typedef和#define的用法与区别   typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译 ...

  6. typedef 优于 #define

    案例一: 通常讲,typedef要比#define要好,特别是在有指针的场合.请看例子: typedef char *pStr1; #define pStr2 char *; pStr1 s1, s2 ...

  7. typedef和#define的区别

    转自:http://www.cnblogs.com/kerwinshaw/archive/2009/02/02/1382428.html 一.typedef的用法在C/C++语言中,typedef常用 ...

  8. typedef与define

    一.typedef用法 typedef常用来定义一个标识符及关键字的别名,它生效是在语言编译过程,但它并不实际分配内存空间.typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性” ...

  9. typedef和define的作用域

    typedef: 如果放在所有函数之外,它的作用域就是从它定义开始直到文件尾: 如果放在某个函数内,定义域就是从定义开始直到该函数结尾: #define: 不管是在某个函数内,还是在所有函数之外,作用 ...

  10. typedef和define具体的具体差别

      1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,仅仅有在编译已被展开的源程序时才会发现可能的错误并报错.比如: #define PI 3. ...

随机推荐

  1. Type-Length-Value编码

    Within data communication protocols, optional information may be encoded as a type-length-value or T ...

  2. Codeforces 85D Sum of Medians

    传送门 D. Sum of Medians time limit per test 3 seconds memory limit per test 256 megabytes input standa ...

  3. zoj3819Average Score

    Average Score Time Limit: 2 Seconds      Memory Limit: 65536 KB Bob is a freshman in Marjar Universi ...

  4. Request.InputStream 接收Post Data

    今天 用 Request.Form /Request.Params 等怎么也获取不到客户发过来的Post 数据 后来试着用了 Request.InputStream 竟然可以 using (Syste ...

  5. ALTER 语句修改数据表

    1.修改数据表名:alter table 表名 rename 新表名; 2.修改列名: alter table 表名 change 列名 新列名(可以与旧的一样) 类型 默认值; 3.修改类型: al ...

  6. 爬虫的自我解剖(抓取网页HtmlUnit)

    网络爬虫第一个要面临的问题,就是如何抓取网页,抓取其实很容易,没你想的那么复杂,一个开源`HtmlUnit`包,4行代码就OK啦,例子如下: final WebClient webClient=new ...

  7. block与函数指针有什么区别

    block就是一个代码块,但是它的神奇之处在于在内联(inline)执行的时候(这和C++很像)还可以传递参数.同时block本身也可以被作为参数在方法和函数间传递,这就给予了block无限的可能. ...

  8. 解决mysqldump: Got error: 1044: Access denied for user

    转自:http://blog.slogra.com/post-512.html 今天给新加的几个数据库备份,在执行mysqldump的时候,居然报mysqldump: Got error: 1044: ...

  9. [原]Android官方图片加载利器BitmapFun解析

    通过BitmapFun在项目中使用,结合代码了解一下BitmapFun加载图片的原理,以及最佳使用实践.本文说明不包括BitmapFun的缓存部分. Android开发在使用ListView和Grid ...

  10. Atlas安装及配置

    ==============linux下快捷键==================ctrl+insert 复制shift +insert 粘贴 输入文件名的前三个字母,按tab键自动补全文件名 在vi ...