typedef常见用法

typedef声明,简称typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。

所谓美观,意指typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。

typedef使用最多的地方是创建易于记忆的类型名,用它来归档程序员的意图。类型出现在所声明的变量名字中,

位于typedef关键字右边。

1.常规变量类型定义

例如:typedef unsigned char uchar

描述:uchar等价于unsigned char类型定义

uchar c声明等于unsigned char c声明

2.数组类型定义

例如: typedef int array[2];

描述: array等价于 int [2]定义;

array a声明等价于int a[2]声明

array* p与 int(*p)[4] 等价,int ia[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};

 
          array *p=ia;

扩展: typedef int array[M][N];

描述: array等价于 int [M][N]定义;

array a声明等价于int a[M][N]声明

3.指针类型定义

例如:  typedef int *pointer;

描述: pointer等价于 int *定义;

pointer p声明等价于int *a声明

例如:  typedef int *pointer[M];

描述: pointer等价于 int *[M]定义;

pointer p声明等价于int *a[M]声明明

4.函数地址说明

描述:C把函数名字当做函数的首地址来对待,我们可以使用最简单的方法得到函数地址

例如: 函数:int func(void);

unsigned long funcAddr=(unsigned long)func;

funcAddr的值是func函数的首地址

5.函数声明

例如: typedef int func(void);

func等价于 int (void)类型函数

描述1: func f声明等价于 int f(void)声明,用于文件的函数声明

描述2: func *pf声明等价于 int (*pf)(void)声明,用于函数指针的生命,见下一条

6.函数指针

例如: typedef int (*func)(void)

描述: func等价于int (*)(void)类型

func pf等价于int (*pf)(void)声明,pf是一个函数指针变量

7.识别typedef的方法:

a).第一步。使用已知的类型定义替代typdef后面的名称,直到只剩下一个名字不识别为正确

如typedef u32   (*func)(u8);

从上面的定义中找到 typedef __u32  u32;typedef __u8 u8

继续找到 typedef unsigned int __u32;typedef unsigned char __u8;

替代位置名称 typedef unsigned int  (*func)(void);

现在只有func属于未知

b).第二步.未知名字为定义类型,类型为取出名称和typedef的所有部分,如上为

func等价于unsigned unsigned  int  (*)(unsigned  char);

c).第三部.定义一个变量时,变量类型等价于把变量替代未知名字的位置所得到的类型

func f等价于unsigned unsigned int  (*f)(unsigned char)

时间: 2024-10-26 11:07:57

typedef常见用法的相关文章

[转载]typedef常见用法

注:本文系转载,并修改了一些错误. typedef常见用法 1.常规变量类型定义 例如:typedef unsigned char uchar描述:uchar等价于unsigned char类型定义 uchar c声明等于unsigned char c声明 2.数组类型定义例如: typedef int array[2];描述: array等价于 int [2]定义; array a声明等价于int a[2]声明 扩展: typedef int array[M][N];描述: array等价于

const和typedef的常见用法详解

一.说说const 一般而言,const主要是用来防止定义的对象再次被修改,定义对象变量时要初始化变量. 常见用法如下: 1.用于定义常量变量,这样这个变量在后面就不可以再被修改 const int Val = 10; //Val = 20; //错误,不可被修改 2. 保护传参时参数不被修改,如果使用引用传递参数或按地址传递参数给一个函数,在这个函数里这个参数的值若被修改, 则函数外部传进来的变量的值也发生改变,若想保护传进来的变量不被修改,可以使用const保护 void  fun1(con

IOS中NSString的常见用法

iOS NSString的常用用法 //1.创建常量字符串. NSString *astring = @"This is a String!"; //2.创建空字符串,给予赋值. NSString *astring = [[NSString alloc] init]; astring = @"This is a String!"; //3.在以上方法中,提升速度:initWithString方法 NSString *astring = [[NSString allo

python之模块pprint之常见用法

# -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块pprint之常见用法 import pprint data = [(1,{'a':'A','b':'B','c':'C','d':'D'}),(2,{'e':'E','f':'F','g':'G','h':'H','i':'I','j':'J','k':'K','l':'L'}),] print '--'*30 #1.打印效果 pprint.pprint (data) ''' ----

.NET中Path类的一些常见用法

.NET为处理文件路径提供了一个Path类,利用该类可以方便的处理文件路径,如更改文件后缀,合并文件路径,改变文件的扩展名等.有一点需要注意的是,Path类本质上是对一个字符串进行处理,更改的只是该字符串,而不会影响实际的文件.下面是该类的一些常见用法示例: 1 string filePath = @"C:\D\log\Receive\postedFile.txt"; 2 int padSpacesLength = 30; 3 string newFilePath = string.E

sscanf的常见用法

例子: 1. 常见用法. char buf[512] = ; sscanf("123456 ", "%s", buf); printf("%s\n", buf); 结果为:123456 2. 取指定长度的字符串.如在下例中,取最大长度为4字节的字符串. sscanf("123456 ", "%4s", buf); printf("%s\n", buf); 结果为:1234 3. 取到指定

正则表达式介绍及常见用法

正则表达式(Regular Expression),又称正规表示法.常规表示法,在实际的软件开发项目中经常会被使用到.它使用单个字符串来描述.匹配并获取一系列符合某个句法规则的结果. 我将从最基础的部分为大家写这个正则表达式教程. 正则表达式起源   1956年,数学家Stephen Kleene在Warren McCulloch和Walter Pitts早期神经系统工作的基础上,设计出了一个数学符号体系--regular sets(规则的集合),这个东西很快被计算机科学家用于编译器的扫描或词法

python之模块poplib之常见用法

# -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块poplib之常见用法 ''' 所以,收取邮件分两步: 第一步:用poplib把邮件的原始文本下载到本地: 第二部:用email解析原始文本,还原为邮件对象. poplib.POP3(host,port,timeout):连接pop3服务器 poplib.POP3_SSL(): POP3.set_debuglevel(level):设置调试模式,可以看到与服务器的交互信息 POP3.ge

【ORM】关于Dapper的一些常见用法

引言 Dapper是.Net平台下一款小巧玲珑的开源Orm框架,简单实用的同时保持高性能,非常适合我这种喜欢手写SQL的人使用,下面介绍一下如何使用Dapper. 相关资料 Dapper的GitHub地址是dapper-dot-net,上面有一些用法和性能的介绍,有兴趣者可以上去看看. 数据库设计和实体类     简单设计两个表,分别为部门表,雇员表. CREATE TABLE [dbo].[T_Dept] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Dept]