zoukankan      html  css  js  c++  java
  • C语言-typedef和#define

    1、关键字 typedef

    为一个数据类型起一个新的别名,typedef 的用法一般为:

    typedef OldName NewName;

    需要强调的是,typedef 是赋予现有类型一个新的名字,而不是创建新的类型。

    2、宏定义 #define

    #define 定义一个标识符来表示一个常量(变量名表示的是一个变量,但宏名表示的是一个常量。可以给变量赋值,但绝不能给常量赋值)。其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。#开头的指令都属于预处理指令。

    #define  标识符  常量   //注意, 最后没有分号

    宏所表示的常量可以是数字、字符、字符串、表达式。其中最常用的是数字。

    宏定义最大的好处是“方便程序的修改”。使用宏定义可以用宏代替一个在程序中经常使用的常量。

    3、typedef 和 #define的区别 (助记:typedef为前面的数据类型起别名,#define为后面的常量做宏定义)

    typedef 在表现上有时候类似于 #define,但它和宏替换之间存在一个关键性的区别。正确思考这个问题的方法就是把 typedef 看成一种彻底的“封装”类型,声明之后不能再往里面增加别的东西。宏定义就是一种替换。

    1) 可以使用其他类型说明符对宏类型名进行扩展,但对 typedef 所定义的类型名却不能这样做。如下所示:

    #define INTERGE int
    unsigned INTERGE n;  //没问题
    
    typedef int INTERGE;
    unsigned INTERGE n;  //错误,不能在 INTERGE 前面添加 unsigned

    2) 在连续定义几个变量的时候,typedef 能够保证定义的所有变量均为同一类型,而 #define 则无法保证。例如:

    #define PTR_INT int *
    PTR_INT p1, p2;

    经过宏替换以后,第二行变为:

    int *p1, p2;

    这使得 p1、p2 成为不同的类型:p1 是指向 int 类型的指针,p2 是 int 类型。

    相反,在下面的代码中:

    typedef int * PTR_INT
    PTR_INT p1, p2;

    p1、p2 类型相同,它们都是指向 int 类型的指针。


    学习参考:http://c.biancheng.net/view/2040.html

  • 相关阅读:
    树莓派学习笔记(三)——远程调试树莓派程序(Pycharm实现)
    树莓派学习笔记(一)——系统安装与远程显示
    记 laravel 排除CSRF验证
    thinkPHP5 生成微信小程序二维码 保存在本地
    微信小程序 rich-text 富文本中图片自适应
    Laravel 中自定义 手机号和身份证号验证
    laravel Excel 导入
    微信小程序之页面跳转(tabbar跳转及页面内跳转)
    关于MySQL事务和存储引擎常见FAQ
    微信小程序点击保存图片到本地相册——踩坑
  • 原文地址:https://www.cnblogs.com/lemonzhang/p/12312459.html
Copyright © 2011-2022 走看看