黑马程序员-C语言的几种定义类型的总结

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

1.枚举类型的定义:

结构体一样,先定义enum类型,再定义变量名。

Enum season

{

    //和结构体的区别,里面的这些属性都是整体常量,值从0开始递增,也可以修改其值。

    Spring,

    Summer,

    Autumn,

    winter

};

Enum season jijie=summer;

Printf(“%d\n”,jijie);//值为1

用途:当我们的变量是固定取值的时候,我们用枚举类型来表示,阅读性强,方便同事交流。



2.预处理定义:

预处理指令主要是代码在编译工具翻译成0和1前执行的,程序中以“#”开头的都属于预处理指令。主要有三种预处理指令:1>宏定义 2>条件编译3>文件包含

预处理指令的位置可以随意放置,但是作用域的范围是从定义的那一行到文件的结束。

1>  宏定义:

(1) 不带参数。#define COUNT 8   #undef结束宏定义

(2) 带参数。 #define  squar(a) ((a)*(a)) //特别重要,参数a不加括号是不严谨的。必须理解宏定义的参数只是进行替换,不会参与运算,带参数的宏定义效率比函数高。

2>条件编译顾名思义就是满足一定的条件才进行编译,否则不编译。好处就是减少编译器的负担,同时还可以杜绝重复定义。格式:

#if () #elif() #else #endif  还有可以#ifndef A #define #endif   #ifdef B #define #endif

3>#include<> 与#include””的区别在于<>包含的是系统的头文件,而””是用户自己定义的头文件,包含的实质就是拷贝一份文件。


3.#typedef 作用:

给已经存在的类型起一个新的类型名,使用场合:

1>  所有的基本数据类型  例:typedef int MyInt

2>  指针               例:typedefchar* String

3>  结构体            例:typedefstruct Person{ int ages;}NewPerson; 

                                             NEWPerson p={20};j结构体指针也是类似,在NEWPerson前加*。

4>  枚举类型                例:跟结构体一样,在此不写。

5>  指向函数的指针      例:这个比较特殊,typedefint *Mypiont(in tint );  Mypoint=sum;


4.Static 与extern的比较

1> static定义和声明一个内部函数,函数只能在本文件内使用,作用域从定义的那一行起到本文件的结束。

修饰全局变量:只能在本文件内使用,作用域从定义的那一行到本文件的结束。

修饰局部变量:只能在块模块(函数)内部使用,当块模块执行完之后内存不销毁,继续调用块模块,值仍然保留上一次的。

2> extern定义和声明一个外部函数,其中关键字可省略。函数在本文件或其它文件都能调用,作用域从定义那一行到文件的结束。

Extern声明和定义的全局变量能被其它文件访问,如果其它文件同样定义了同一全部变量,那么使用时将共享同一块内存的变量。

带有extern的变量在函数(块模块)里面仍然可以作为全局变量被使用。

补充:static法则:

    1>若全局变量仅在单个C文档中访问,则能够将这个变量修改为静态全局变量,以降低模块间的耦合度;

    2>若全局变量仅由单个函数访问,则能够将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;

    3>设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值