body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-child(2n){background-color: #f8f8f8;}

typedef 声明新的类型名来代替已有的类型名。
声明INTEGER为整型:
typedef int INTEGER
声明结构类型:
     typedef struct{
         int month;
         int day;
         int year;}DATE;   // DATE 就代表结构体变量
声明 NUM 为整型数组类型 :
typedef int NUM[100];  ==> int == NUM
声明 STRING 为字符指针类型:
typedef char *STRING;  ==> char * == STRING
声明 POINTER 为指向函数的指针类型,该函数返回整型值 :
typedef int (*POINTER)();  ==> POINT 就是 int func_name () ; 类型的函数的地址
① 先按定义数组变量形式书写:int n[100];
② 将变量名n换成自己指定的类型名:
   int NUM[100];
③ 在前面加上 typedef ,得到
   typedef int NUM[100];
④ 用来定义变量:NUM n;//这里就直接用n去代替typedef 后面的NUM 

        void swap(int *a,int *b); 
     typedef void (*p)(int*,int*); 
     p z = swap; // swap函数的入口地址赋值给变量 z 
     z(a,b); 

(1) 用 typedef 可以声明各种类型名,但不能用来定义变量。
(2) 用 typedef 只是对已经存在的类型增加一个类型名,而没有创造新的类型。
(3) 当不同源文件中用到同一类型数据时,常用 typedef 声明一些数据类型,把它们单独放在一个文件中,然后在需要用到它们的文件中用 #include 命令把它们包含进来。
(4) 使用 typedef 有利于程序的通用与移植。
(5) typedef与#define有相似之处,例如:
typedef int COUNT ;    #define COUNT int  的作用都是用 COUNT 代表 int 。但事实上,它们二者是不同的。#define是在预编译时处理的,它只能作简单的字符串替换,而typedef是在编译时处理的。实际上它并不是作简单的字符串替换,而是采用如同定义变量的方法那样来声明一个类型。

#include<stdio.h>
#include<stdlib.h>
typedef void(*func1)();  //定义一个函数指针类型(比如我们说的int类型一个概念)
void func()
{
        printf("hello world\n");
}
int main()
{
        void (*pfunc)();  //定义一个函数指针
        //func1 = func;  //func1是一个类型,类似不能 int = a;
        func1 a = func;   //声明类型变量
        pfunc = func;     //函数指针赋值
        pfunc();
        a();
        system("pause");
}

//注意在C和C++里不同
    在C中定义一个结构体类型要用typedef:
    typedef struct Student
    {
           int a;
    }Stu;
   Stu==struct Student    

于是在声明变量的时候就可:Stu stu1;     (如果没有typedef就必须用  struct Student stu1;  来声明)
    另外这里也可以不写Student(于是也不能struct Student stu1;了,必须是Stu stu1;)
    typedef  struct
    {
           int a;
    }Stu;
    但在c++里很简单,直接
    struct  Student
    {
          int a;
    };    
    于是就定义了结构体类型Student,声明变量时直接Student stu2;
======================================================================================

    在c++中如果用typedef的话,又会造成区别:
    struct   Student  
    {  
           int   a;  
    }stu1;//stu1是一个变量  ,相当于Student stu1;

    typedef   struct   Student2  
    {  
          int   a;  
    }stu2; //stu2==struct Student2

    使用时可以直接访问 stu1.a
    但是stu2则必须先   stu2 s2;         s2.a=10;

======================================================================================

C/C++ typedef的更多相关文章

  1. 19-typedef

    本文目录 一.typedef作用简介 二.typedef与指针 三.typedef与结构体 三.typedef与指向结构体的指针 四.typedef与枚举类型 五.typedef与指向函数的指针 六. ...

  2. #define与typedef在重定义类型中的区别

    #define 为完全的替换 typedef 重新定一个数据类型 eg #define charp1 char* typedef char* charp2charp1 a,b; //a char* b ...

  3. typedef

    第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, ...

  4. 用typedef定义函数指针的问题

    在学习windows API的时候,遇到下面这段代码   以前见过的typedef的用法都是给一个数据类型取一个别名 typedef oldTypeName newTypeName   这种给数据类型 ...

  5. C语言语法 typedef小结

    在总结typedef之前,先了解一个专业术语: 常量指针(const pointer):常量指针在定义的时候必须被初始化,而且一旦初始化完成,则它的值就不能再改变. int errNumb = 0; ...

  6. 如何理解typedef void (*pfun)(void)

    问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...

  7. C及C++中typedef的简单使用指南

    又是在学数据结构的时候,发现了之前学习的知识遗忘很多,在发现对C/C++中关键字typedef的理解还是没有到位后,我翻阅了学C++用到的课本,又问了度娘,也看了不少关于typedef用法的博客.于是 ...

  8. [转]关于typedef的用法总结

    不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些 ...

  9. typedef 和 #define 的区别

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

  10. [转载]彻底弄清struct和typedef struct

    struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

随机推荐

  1. 微信小程序开发之详解生命周期方法

    生命周期是指一个小程序从创建到销毁的一系列过程 在小程序中 ,通过App()来注册一个小程序 ,通过Page()来注册一个页面 先来看一张小程序项目结构 从上图可以看出,根目录下面有包含了app.js ...

  2. php echo和print_r和var_dump的区别

    echo -- 适合打印单数据 整型 字符串 浮点型 print_r -- 适合打印符合数据 数组 资源 对象 var_dump -- 适合调试变量打印特许的类型 如BOOL NULL 不仅能把值打印 ...

  3. 第四章:大数据 の HBase 基础

    本课主题 NoSQL 数据库介绍 HBase 基本操作 HBase 集群架构与设计介紹 HBase 与HDFS的关系 HBase 数据拆分和紧缩 引言 介绍什么是 NoSQL,NoSQL 和 RDBM ...

  4. Java学习笔记21(String类补充:正则表达式)

    正如python的re模块,不过Java和Python的正则表达式有一些区别,这里做简单介绍,具体的细节可以参考网上其他的文章: 功能:可以用于检验一个字符串,比如验证用户名,验证密码格式,验证是否是 ...

  5. 【后缀数组】洛谷P3809模板题

    题目背景 这是一道模板题. 题目描述 读入一个长度为 n n n 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置. ...

  6. C和Lua之间的相互调用

    前面的话 第一次接触Lua是因为Unity游戏中需要热更,但是一直没搞懂Lua是怎么嵌入到别的语言中执行的,如何互相调用的.这次打算好好了解一下C跟lua是如何交互的 那么如何使用Lua语言? lua ...

  7. VSCode好用的Python插件及配置

    MS Python插件. 这是微软官方的Python插件,已经自带很多功能.下面是插件功能描述,其中部分内容我做了翻译. a)        Linting (Prospector, Pylint,  ...

  8. 用JAVA写一个冒泡排序

    一:实现思想: 基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即:每当两相邻的数比较后发现它们的排序与排序要 ...

  9. Redis随笔(一)Linux Redis 搭建

    1.到官网下载redis上传服务器或者使用wget 下载 wget redis下载的路径 2.查看linux是否安装编译环境gcc,没有先安装 yum -y install gcc 3.解压redis ...

  10. 从Unity中的Attribute到AOP(二)

    上一篇文章我们初步了解了一下Attributes的含义,并且使用系统自带的Attributes写了点代码.在进一步解剖我们的代码之前,我觉得有个概念可能需要巩固一下:什么是元数据? 我们知道C#代码会 ...