有些网站打不开怎么解决,登录入口网址,wordpress英文站更新通知目录,东莞网站推广软件昨天面试的时候面试官问了这个问题#xff0c;平时也有见过这两个类型限定词#xff0c;可能是因为不怎么使用的原因#xff0c;当问到它们的区别时#xff0c;我不知道从哪个方面开始回答。 用 typedef 定义新的类型名 类型定义的书写格式为 typedef 类型 被定义的类型名 … 昨天面试的时候面试官问了这个问题平时也有见过这两个类型限定词可能是因为不怎么使用的原因当问到它们的区别时我不知道从哪个方面开始回答。 用 typedef 定义新的类型名 类型定义的书写格式为 typedef 类型 被定义的类型名 被定义类型名通常用大写字母构成。从语法形式上看typedef出现在“类型”的左边类似于 extern、static 等存储类区分符在说明中所占的位置实际上typedef不保留存储空间只是为了语法上方便才称它为“存储类区分符”。 typedef char *STRING; typedef int MILES, *SP, (*PF)(); 显然MILES与int同义而SP与指向int型的指针同义STRING与字符指针同义PF与指向函数返回int型的指针同义。
必须强调typedef说明并不产生新的类型只是给已有的类型添加新的类型名或者说以另一种方式来指出类型而已。使用这种方式说明的变量与关键字明确指出类型的那些变量具有同样的性质。
使用typedef说明的主要原因有两个
1. 使说明便于理解。用这种类型定义方式使指向复杂结构的指针的说明方式简洁明了。
2. 将程序参数化以便移植。若typedef用在与机器有关的数据类型中当程序移植时只要改变typedef就可以了。通常情况是对不同的整数量使用typedef所产生的名因而每个宿主机能够挑选出与short、int和logn适应的集合。
最终将来总可以让编译程序或其它程序如lint用typedef说明中的信息来对程序进行附加的检查。 这里说的是不是在debug的时候可以通过typedef定义的变量名更方便找到问题出现的位置。 类型限定词
C语言中有两个关键字称为类型限定词const和volatile。前者将对象限定为常量后者将对象限定为易变量。
类型限定词的书写位置在类型名即类型区分符之首当有存储类区分符时声明中各词的次序可为 类型限定词 存储类区分符 标识符 或 存储类区分符 类型限定词 标识符 被const限定的对象在一次定值后不允许再赋值或增量、减量。
需要注意C语言中const的用法与PASCAL中的const不完全相同其特点是
1. 类型限定词的作用在遇到分号时就停止了。
2. 聚集类型的规格说明中也可以包含限定词如下面的标识符a就被限定为数组常量名
typedef int AT[2][3]; /* AT是2行3列的整数型数组名 */
const AT a {{4, 5, 6}, {7, 8, 9}}; /* a是AT型数组其元素是const int型 */
3. 为使两个限定类型相容则二者都应为相容类型的完全相同的限定形式。因此若在以上声明中增添下列两条
int *pi;
const int *pci;
则语句 pci (a[0][1]); 是有效的而语句 pi (a[0][1]); 无效因为等号两边的类型不匹配。不过有些编译器并未严格按照C语言标准去实现。因此语句 pi (a[0][1]); 仍可能通过编译。
4. 如果对程序中的一些变量人们不希望编译器对它的计算顺序进行任何优化或重新排序则在声明时应当用限定词 volatile 进行约束。这在描述对应于存储映射的输入输出端口的对象或由异步中断函数访问的对象时经常用到如 extern const volatile int real.time.clock; 则 real.time.clock可被硬件在程序员不确切知道的情况下进行修改但编译器不会对它进行计算顺序的变更。
5. 同一对象可以受两个不同限定词的约束例如声明为
extern const volatile int real.time.clock;
的对象除了4中的叙述特点外还受不能被赋值增量或减量的限制。
内部函数与外部函数
对于比较大的程序通常分放在多个源文件中也称为多源文件multy files。因为每个文件是一个编译单元于是修改某个源文件时不必重新编译其它的源文件。这种文件结构还便于多人分别编写与调试程序。采用多文件结构时对各个文件中的变量与函数的定义与使用应当相互协调这不仅涉及到正确运用变量的存储类还要掌握内部函数等概念。
1. 内部函数
内部函数只能被本程序文件中其他函数所调用。内部函数的定义方法是在函数的类型前加static即 static 类型标识符 函数名(数据类型 形式参数1, 数据类型 形式参数2, ...) { 函数体 } 内部函数又称静态函数。使用内部函数可以使函数只局限于所在文件即不同的文件中有相同函数名的函数也不会相互干扰。这在多人同时编写一个程序的不同部分的时候特别有用。通常把只由同一文件使用的函数和外部变量放在一个文件中用static加以说明使之局部化限制其他文件对其引用。
2. 外部函数
外部函数的定义方法是在函数的类型标识符名前加extern即 extern 类型标识符 函数名数据类型 形式参数1数据类型 形式参数2...{ 函数体 } 如果在定义函数时省略extern则默认为外部函数。在需要调用此函数的文件中对此函数进行原型声明时一般也要用extern来说明所调用的函数是在其他文件中定义的外部函数。