typedef 和define的区别

总结一下typedef和#define的区别

1.概念

  #define 它在编译预处理时进行简单的替换,不作正确性检查。它是预处理指令。

  typedef 它在自己的作用域内给一个已经存在的类型一个别名。它是在是在编译时处理的。

  例子:

#define:

#define DO double
DO val =5;//相当于 double va =5;

#define FUN(X)  X+5
int va = FUN(3); //相当于 va = 3+5

typedef:  

typedef double D;//就是给double起一个别名D
D val;//相当于是double val

//用dypedef定义数组
typedef double arr[3];//arr就是一个长度为3的double类型数组
arr arr1;   //相当于 double arr1[3]

//用dypedef定义函数指针
typedef void (*fun)();//表示fun是一个指向 void类型的指针函数

void StrGet() {
    qDebug()<<"str";
}

fun f1=StrGet;
f1();

2.区别

  执行时间不一样
    #define 是在预处理阶段,也就是在编译之前进行替换工作
    typedef 是在编译阶段,会进行类型检查

  作用域不同
    #define 无论在哪定义过,在其它的地都可以使用
    typedef 只能在定义的作用域内使用

  对指针的操作不一样

#define PINT int *
    typedef int * pint;

    int a =3;
    int b =5;
    const pint p1=&a; //相当于 int * const p1;  p1 不可以更改但指向的内容能被修改
    *p1=1;
    p1=&b;  //error
    const PINT p2 =&a;//相当于 const int * p2;  p2 可以被修改但指向的内容不可以修改
    p2=&b;
    *p2=1;  //error

 

时间: 2024-10-17 22:01:49

typedef 和define的区别的相关文章

typedef和#define的用法以及区别_C 语言

一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: typedef    int       INT;typedef    int       ARRAY[10];typedef   (int*)   pINT; typedef可以增强程序的可读性,以及标识符的灵活性,但它也有"非直观性"等缺点. 二.#define的用法 #define为一宏定义语句,通常用它来定义常量(包括无参

计蒜客 C语言 泥塑课中结构体的使用时,typedef使用与否的区别

问题描述 计蒜客 C语言 泥塑课中结构体的使用时,typedef使用与否的区别 代码一: #include typedef struct student{ int l; int w; int h; int v; char name[9]; }stu[10]; void func(int n){ int i, ave = 0, robber, victim; for(i = 0; i < n; i ++){ scanf("%d %d %d %s", &stu[i].l, &

51单片机编程sbit与#define的区别

问题描述 51单片机编程sbit与#define的区别 在keil编程中: #define dula P2^6不对 而必须sbit dula=P2^6: 请问为何? 解决方案 #define是宏定义,定义的东西编译时由编译器进行宏展开 sbit是外部位声明,就是单片机的外部端口 bit是内部20H-2FH的可寻址位定义或着是声明 以上指令都有固定的用途 解决方案二: sbit就是定义一个标志位,也叫位变量,比如一个8位的寄存器就可以看作八个位变量. #define就是替代或者替换的意思,

深入分析PHP const与define使用区别

注意:define不能定义在类中,而const必须定义在类中,并且const必须通过类名::变量名来进行访问 1.const用于类成员变量定义,一旦定义且不能改变其值.define定义全局常量,在任何地方都可以访问. 2.define不能在类中定义而const可以. 3.const不能在条件语句中定义常量 4.const采用一个普通的常量名称,define可以采用表达式作为名称. 5.const只能接受静态的标量,而define可以采用任何表达式. 6.const 总是大小写敏感,然而defin

C语言中的typedef详解

typedef声明,简称 typedef,为现有类型创建一个新的名字.比如人们常常使用 t ypedef来编写更美观和可读的代码.所谓美观,意指typedef能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性. typedef使用最多的地方是创建易于记忆的类型名,用它来归档程序员的意图.类型出现在所声明的变量名字中,位于 ''typedef''关键字右边.例如:typedef int size; 此声明定义了一个 int的同义字,名字为 size.注意 typede

关于typedef之四种用途 和 两个陷进

typedef用来声明一个别名,typedef后面的语法,是一个声明.本来笔者以为这里不会产生什么误解的,但结果却出乎意料,产生误解的人 不在少数.罪魁祸首又是那些害人的教材.在这些教材中介绍typedef的时候通常会写出如下形式: typedef int PARA; 这种形式跟#define int PARA几乎一样,如前面几章所述,这些教材的宗旨是由浅入深,但实际做出来的行为却是以偏盖全.的确,这种形式在所有形式中是最简单的,但却没有对 typedef进一步解释,使得不少人用#define的

深入C++ typedef的用法总结(必看)_java

第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量:以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:char *pa, *pb;也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省

C语言 typedef:给类型起一个别名_C 语言

C语言允许为一个数据类型起一个新的别名,就像给人起"绰号"一样. 起别名的目的不是为了提高程序运行效率,而是为了编码方便.例如有一个结构体的名字是 stu,要想定义一个结构体变量就得这样写: struct stu stu1; struct 看起来就是多余的,但不写又会报错.如果为 struct stu 起了一个别名 STU,书写起来就简单了: STU stu1; 这种写法更加简练,意义也非常明确,不管是在标准头文件中还是以后的编程实践中,都会大量使用这种别名. 使用关键字 typede

C/C++基础总结

1 static(静态)变量有什么作用 3个体明显的作用:1)在函数体内,静态变量具有"记忆"功能,即一个被声明为静态变量在一个函数被调用的过程中其值维持不变2)在模块内,它的作用域范围是有限制的,即如果一个变量被声明为静态的,那么该变量可以被模块内所有函数访问,但不能被模块外其他函数访问.3)内部函数应该在当前源文件中说明和定义,对于可在当前源文件以外使用的函数,应该在一个头文件中说明,使用这些函数的源文件要包含这个头文件. 与局部变量和全局变量的区别:static全局变量和普通全局