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. Oracle死锁情况

    ORACLE EBS操作某一个FORM界面,或者后台数据库操作某一个表时发现一直出于"假死"状态,可能是该表被某一用户锁定,导致其他用户无法继续操作 复制代码 代码如下: --锁表 ...

  2. Jenkins:基于linux构建ivy项目

    Jenkins:基于linux构建ivy项目 (二) 基于以上<Jenkins:VMware虚拟机Linux系统的详细安装和使用教程(一)>的配置再进行对ivy项目构建: 启动tomcat ...

  3. lbp特征提取(等价模式)

    LBP等价模式 考察LBP算子的定义可知,一个LBP算子可以产生多种二进制模式(p个采样点)如:3x3邻域有p=8个采样点,则可得到2^8=256种二进制模式:5x5邻域有p=24个采样点,则可得到2 ...

  4. C# ASP.NET 转换为int型的方法 很实用

    很多新手在搞c#或者.net开发的时候总会碰到一些小问题,如何知道字符能不能为int型  在这里我写了一个小的函数仅供大家参考: /// <summary> /// 判断是不是int型 / ...

  5. RLP

    ** 原创勿转 ** 这是在看devp2p时看到的,英文原文地址:https://github.com/ethereum/wiki/wiki/RLP RLP:  Recursive Length Pr ...

  6. 【树状数组】BZOJ3132 上帝造题的七分钟

    3132: 上帝造题的七分钟 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1004  Solved: 445[Submit][Status][Dis ...

  7. rabbitmq:centos7安装与python调用

    1.centos安装rabbitmq 官网下载或者yum list |grep rabbitmq搜索安装,官网是最新的版本 wget http://www.rabbitmq.com/releases/ ...

  8. 【括号问题】$("li:lt(" + (idx + 1) + ")") 手风琴效果注意事项

    $("li:lt(" + (idx + 1) + ")").each(function(i){ 注意,这里必须要加括号,是因为如果不加,idx与前面  &quo ...

  9. CVE-2017-8464复现 (远程快捷方式漏洞)

    我们的攻击机IP是192.168.222.133 目标机IP是192.168.222.132 我们首先生成一个powershell msfvenom -p windows/x64/meterprete ...

  10. HDU4920-Matrix multiplication-矩阵乘法 51nod-1137 矩阵乘法

    先贴两个基础的矩阵乘法,以后再贴一些题. hdu. Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Lim ...