- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE
PAGE #
c语言中typedef的用法
c语言中typedef的用法的用法你知道吗?下面就跟你们详细介绍下c语言中typedef的用法的用法,希望对你们有用。
c语言中typedef的用法的用法如下:
一.基本概念剖析
TOC \o 1-5 \h \zint*(*a[5])(int,char*);//#1
void(*b[10])(void(*)());//#2
double(*)()(*pa)[9];〃#3
C语言中函数声明和数组声明。函数声明一般是这样:
intfun(int,double);
对应函数指针(pointertofunction)的声明是这样:
int(*pf)(int,double);
可以这样使用:
pf=amp;fun;〃赋值(assignment)操作
(*pf)(5,8.9);//函数调用操作
也请注意,C语言本身提供了一种简写方式如下:
pf=fun;//赋值(assignment)操作
pf(5,8.9);//函数调用操作
不过我本人不是很喜欢这种简写,它对初学者带来了比较多的迷惑。
数组声明一般是这样:
inta[5];
对于数组指针(pointertoarray)的声明是这样:
int(*pa)[5];
可以这样使用:
pa=amp;a;//赋值(assignment)操作
inti=(*pa)[2];//将a[2]赋值给i;
有了上面的基础,我们就可以对付开头的三只纸老虎了!:)这个时候你需要复习一下各种运算符的优先顺序和结合顺序了,顺便找
本书看看就够了。
1:int*(*a[5])(int,char*);
首先看到标识符名a,“『优先级大于“*”,a与“[5]”先结合。所以a是一个数组,这个数组有5个元素,每一个元素都是一个指针,
指针指向“(int,char*)”,对,指向一个函数,函数参数是“int,char*”,返回值是“int*”。完毕,我们干掉了第一个纸老虎。:)
2:void(*b[10])(void(*)());
b是一个数组,这个数组有10个元素,每一个元素都是一个指针,指针指向一个函数,函数参数是“void(*)()”【注1],返回值是
“void”。完毕!
注1:这个参数又是一个指针,指向一个函数,函数参数为空,返回值是“void”。
#3:double(*)()(*pa)[9];
pa是一个指针,指针指向一个数组,这个数组有9个元素,每
一个元素都是“double(*)()”【也即一个指针,指向一个函数,函数
参数为空,返回值是“double
1:int*(*a[5])(int,char*);
typedefint*(*PF)(int,char*);//PF是一个类型别名【注2】。
PFa[5];//跟int*(*a[5])(int,char*);的效果一样!
注2:很多初学者只知道typedefchar*pchar;但是对于
typedef的其它用法不太了解。StephenBlaha对typedef用法做过一个总结:“建立一个类型别名的方法很简单,在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头”。
2:void(*b[10])(void(*)());
typedefvoid(*pfv)();
typedefvoid(*pf_taking_pfv)(pfv);
pf_taking_pfvb[10];//跟void(*b[10])(void(*)());的效果一样!
3.double(*)()(*pa)[9];
typedefdouble(*PF)();
typedefPF(*PA)[9];
PApa;//跟doube(*)()(*pa)[9];的效果一样!
3.const和volatile在类型声明中的位置。
在这里我只说const,volatile是一样的!【注3]
注3:顾名思义,volatile修饰的量就是很容易变化,不稳定的
量,它可能被其它线程,操作系统,硬件等等在未知的时间改变,
所以它被存储在内存中,每次取用它的时候都只能在内存中去读取,它不能被编译器优化放在内部寄存器中。
类型声明中const用来修饰一个常量,我们一般这样使用:const在前面:
constint;〃int是const
constchar*;//char是const
char*const;//*(指针)是const
constchar*const;//char禾口*都是const
对初学者,constchar*和char*const是容易混淆的。这需要时间的历练让你习惯它。上面的声明有一个对等的写法:const在
后面:
intconst;//int是const
charconst*;//char是const
char
文档评论(0)