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. Model1模式的学生信息增删改查

    Student.java package entity; public class Student { private int stuid; private String stuname; priva ...

  2. android anr分析方法

    目录(?)[+] 案例1关键词ContentResolver in AsyncTask onPostExecute high iowait 案例2关键词在UI线程进行网络数据的读写   一:什么是AN ...

  3. SSH整合之spring整合hibernate

    SSH整合要导入的jar包: MySQL中创建数据库 create database ssh_db; ssh_db 一.spring整合hibernate带有配置文件hibernate.cfg.xml ...

  4. C#里List.Sort的用法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace List ...

  5. java分布式通信系统(J2EE分布式服务器架构)

    一.序言 近几个月一直从事一个分布式异步通信系统,今天就整理并blog一下. 这是一个全国性的通信平台,对性能,海量数据,容错性以及扩展性有非常高的要求,所以在系统的架构上就不能简单的采用集中式.简单 ...

  6. android-解决 Android N 上 报错:android.os.FileUriExposedException

    解决 Android N 上 安装Apk时报错:android.os.FileUriExposedException: file:///storage/emulated/0/Download/appN ...

  7. 关于31天App教程示例中一些因SDK版本而出现的问题(转)

    由于国外那个知名的31天案例教程比较老,所用官方API是2008年时的2.X,所以在现在的Xcode3-4之后或多或少都有编译警告和错误信息.必须做些适应iOS版本的代码更改才能顺利编译通过. Day ...

  8. hdu.5203.Rikka with wood sticks(数学推导:一条长度为L的线段经分割后可以构成几种三角形)

    Rikka with wood sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/O ...

  9. Linux/Ubuntu tree 命令以树形结构显示文件夹目录结构

    1.安装命令工具 sudo apt-get -y install tree 2.可以查看关于tree命令的帮助信息 $ tree --help usage: tree [-adfghilnpqrstu ...

  10. sql分组取第一条数据

    sq分组取第一条数据的一个方法: select * from ( select row_number() over(partition by ID order by ID) as rownum , * ...