- 1、本文档共81页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 类型定义用关键字 typedef typedef unsigned long int ULI; 定义后的ULI可以像基本类型名一样用: ULI x, y, *p; ULI fun1(double x, ULI n); p = (ULI*)malloc(n*sizeof(ULI)); 这种类型定义可简化程序书写,有一定实际价值。 有时定义新类型可提高可读性和清晰性。如: typedef double LENGTH; typedef double AREA; 定义不同类型名可能帮人看到不一致情况。 7.7 定义类型 C语言类型定义机制较弱,其主要作用是简化描述。 * 注:C语言认为定义的只是原类型的别名。LENGTH和AREA是double的别名。提高程序的可读性。 用预处理命令可产生类似效果。如: #define LENGTH double #define AREA double 但两种写法处理过程不同,类型定义由编译程序处理。 有些类型不能通过宏的方式(例如数组类型)。 * 定义数组类型 例:typedef double VECT4[4]; 此后可以写: VECT4 v1, v2; int intprod(VECT4 v, VECT4 u); 5×5的双精度数组类型: typedef double MAT[5][5]; MAT a1, a2, a3; /*定义5×5数组变量*/ double det(MAT m); /*说明函数参数*/ MAT *p = (MAT *)malloc(sizeof(MAT)); * 定义指针类型 例如:typedef int * IP; typedef MAT * MATP; 用宏定义代替它们,可能造成意想不到的结果。例如写 #define MIP int * 而后希望定义两个指针: MIP mp1, mp2; /* int* mp1,mp2;*/ 可发现mp2不是指针,而是一个int变量。 宏是低级正文代换机制,应尽量少用。这又是一例。 需要定义类型名时,应该用typedef。 * 复杂类型描述与解读 类型描述可能变得很复杂(C语言的缺点)。 应尽量不写复杂描述。用typedef分解,易理解/少出错。定义后可多次使用/节省时间/方便维护。 读程序时可能遇到复杂类型描述。应了解类型描述的一般构造及解读方式。描述类型时也能更清楚,知道怎样写,什么地方需要加括号等。 类型描述中可出现:已定义类型名,被定义标识符,构造符号(三个(组)运算符): * [] () 指针 数组 函数 可加圆括号改变结合关系。 * 解读方式:符号意义不变,优先级和结合关系按运算符规定。 []和()结合性强,*结合力弱;[]和()从左到右结合,*从右向左结合。 首先辨认被说明(定义)的标识符,从它向外分析。 一些例子: 1)int *f(int); 被说明的是f,f是一个函数,函数的返回值是指向整型的指针。 2)int (*fp)(int); 说明的是fp。fp是一个指针,指向一函数,函数参数为整型, 返回值为整型。... 3)char **argv; argv是个指针,指向(char*) * 4)int (*dp)[16]; dp是指针,它指向有16个元素的整型数组。 5)int *dp1[16]; dp1是个16个元素的数组,其元素是整型指针。 6)int (*(*g(int))[4])(double); 被说明的是函数 g,有一整型参数,返回指针,指针指向4个元素的数组,数组元素是指向函数的指针,被指函数有一个双精度参数并返回整数值。 类型描述就是用三种构造符号及表示结合性的括号,逐层构造起来。很复杂的类型描述非常少见。 有些构造不合法:函数不能返回数组,函数不能返回函数,函数不能作数组元素等。 * 利用typedef能更清晰地描述复杂类型。 原描述: int (*(*g(int))[4])(double); 先定义函数指针类型和函数指针数组类型: typedef int (*funp)(double); typedef funp fparray[4]; 有这两个类型,g的类型可以简单地说明为: fparray *g(int); g是函数,有一个int参数,返回指向fparray的指针 上面定义的两个类型也可以用于定义变量等。 * 地址与指针 指针变量的定义和使用 指针与数组 指针数组 多维数组作为参数的通用函数 动态存储管理 定义类型 指向函数的指针 主要内容 * 指向数学函数的指针类型: typedef double (*MFP)(double); 这里假定数学函数都是有一个双精度参数、返回双精度值的。注意类型
文档评论(0)