C语言声明学习之篇-基础电子_第1页
C语言声明学习之篇-基础电子_第2页
C语言声明学习之篇-基础电子_第3页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档-下载后可编辑C语言声明学习之篇-基础电子作者:杨硕,华清远见嵌入式学院讲师。C语言的设计哲学要求对象的声明形式和它的使用形式尽可能相似,比如一个int类型的指针数组被声明为int*p[3];并以*p[i]这样的表达式引用或者使用指针所指向的int数据,所以它的声明形式和使用形式非常相似。这样做的好处是各种不同操作符的优先级在“声明”和“使用”时是一样的,而缺点恰好在与C语言的操作符的优先级过于复杂(有15级或者更多,取决于你怎么算),这是C语言设计不当、过于复杂之处。

实际上有些关键字只能出现在声明中,而不是使用中,比如volatile和const等,这使得声明形式和使用形式能完全对的上号的例子越来越少了。如果想要把什么东西强制转换为指向数组的指针,就不得不使用下面的语句来表示这个强制类型转换:

———char(*j)[20];

———j=(char(*)[20])malloc(20);

这个强制类型转换看上去很滑稽,星号两边的括号看上去可有可无,但是如果去掉就会变成非法语句。

涉及指针和const得声明可能会有下面几种不同的组合:

———constint*p;

———intconst*p;

———int*constp;

前两种情况,指针所指向的对象是只读的,而一种情况下指针是只读的。

如果我们想让对象和指针都是只读的,那么下面两种声明都能做到这一点:

———constint*constp;

———intconst*constp;

经过初级篇、中级篇一直到前面的学习我们发现其实分析一个声明就是按照操作符优先级规则把声明分解开来,分别解释各个组成部分。要理解一个声明,必须要懂得其中的优先级规则,下面是《C编程》中总结的C语言声明的优先级规则:

A声明从它的名字开始读取,然后按照优先级顺序依次读取;

B优先级从高到低依次是:

B.1声明中被括号括起来的那部分;

B.2后缀操作符:括号()表示这是一个函数,而方括号[]表示这是一个数组;

B.3前缀操作符:星号*标识“指向……的指针”;

C如果const和(或者)volatile关键字的后面紧跟类型说明符(如int,long等),那么它作用于类型说明符,在其他情况下,const和(或)volatile关键字作用于它左边紧邻的指针星号。

现在,让我们用优先级规则来分析C语言的一个较复杂的声明:

———char*const*(*next)();

B.1(*next)——next为一个指向……的指针

B.2(*next)()——next是一个函数指针

B.3*(*next)()——next是一个函数指针,这个函数返回一个指向……的指针

Cchar*const——指向字符类型的常量指针

故char*const*(*next)();的含义就是:next是一个函数指针,这个函数返回一个指向字符类型的常量指针。

我想到现在我们是不是发现分析C语言声明其实并不像一开始那么令人感到无比痛苦,它反而给我们带来了乐趣,不是吗?其实我们只要多分析几个实例,多读一些高质量的C代码,那么分析一个C语言声明不再是一件可怕的事情(更何况我们还有cde

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论