《C语言深度解剖》学习笔记之关键字
第一章 关键字
C语言共有32个关键字。
关键字 | |
auto | 声明自动变量 |
int | 声明整型变量 |
long | 声明长整型变量 |
char | 声明字符型变量 |
float | 声明浮点型变量 |
short | 声明短整型变量 |
double | 声明双精度变量 |
signed | 声明有符号类型变量 |
unsigned | 声明无符号类型变量 |
struct | 声明结构体变量 |
union | 声明联合数据类型 |
enum | 声明枚举数据类型 |
static | 声明静态变量 |
switch | 用于开关语句 |
case | 开关语句分支 |
default | 开关语句中的其他分支 |
break | 跳出当前循环 |
register | 声明寄存器变量 |
const | 声明只读变量 |
volatile | 说明变量在程序中可被隐含地改变 |
typedef | 给数据类型取别名 |
extern | 声明变量是在其他文件中声明(若要寻找声明定义的话,去其他文件中找) |
return | 子程序返回语句 |
void | 声明无返回值,无参数,无指针类型 |
continue | 结束当前循环,开始下一循环 |
do | 循环语句的循环体 |
while | 循环语句的循环条件 |
if | 条件语句 |
else | 条件语句否定分支 |
for | 循环语句 |
goto | 无条件跳转语句 |
sizeof | 计算对象所占内存大小 |
1.定义与声明的区别:
定义:编译器创建一个对象,为这个对象分配一块内存(有住的地方),并给它取上一个名字即变量名(怎么称呼),而且在一定区域内只能被定义一次。
声明:第一重含义,告诉编译器,这个变量已经被定义了(名字,内存地址都被分配好了)。
第二重含义,这个名字已经被预定了,别的地方不能用它来声明变量名或对象名。如
void fun(int i, char c);
2.关键字register
- register变量必须是能被CPU寄存器所接受的类型(必须是单个的值,其长度小于等于整形的长度)
- register变量可能不放在内存中,不能用取值运算符“&”来获取register变量的地址
3.关键字static
修饰变量:
静态全局变量:作用于仅限于变量被定义的文件中,其他文件即使使用extern声明也无法使用它。更准确的说,作用域从定义之处开始,到文件结尾处结束,在定义之前的 代码也不能使用它(最好在文件顶端处定义)
静态局部变量:函数运行结束,但static修饰的变量不会被销毁,下次仍可使用这个值
修饰函数:函数前加static为静态函数,指对函数的作用域仅限于本文件
4.基本数据类型——short,int,long,char,float,double
在32位系统上,char 内存大小为 1字节
short 内存大小为 2字节
int 内存大小为 4字节
long 内存大小为 4字节
float 内存大小为 4字节
double 内存大小为 8字节
5.变量的命名规则
【规则1-1】命名应当直观,可望文知义,便于记忆与阅读
【规则1-2】命名的长度应该符合“min-length && max-information”原则
【规则1-3】当标识符有多个词组成时,每个词的第一个字母大写
【规则1-4】避免名字中出现数字编号
【规则1-5】多个文件之间共同使用的全局变量或函数要加范围限定符
6.标识符的命名规则
【规则1-6】标识符分为两部分:规范标识符前缀 + 含义标识
【规则1-7】变量命名使用名词性词组,函数命名使用动词性词组
【规则1-8】程序中不能出现仅靠大小区分的标识符(尤其要注意 数字1和字母l;数字0和字母o)
【规则1-9】一个函数名禁止被用于其他之处(如命名一个变量)
【规则1-10】所有宏定义,枚举常数,只读变量全用大写字母命名,用下划线分割单词,如
const int MAX_LENGTH = 100;
#define FILE_PATH "/usr.tmp"
【规则1-11】局部变量中可采用通用的命名方式。如n,m,i,j,k表示int类型;c,ch表示字符;a表示数组;p表示指针
【规则1-12】结构体被定义时必须有明确的结构体名
【规则1-13】定义变量的同时千万别忘了初始化
【规则1-14】不同类型的数据之间的运算要注意精度扩展问题
【规则1-15】禁止使用八进制格式的数
【注意】strlen()函数是计算字符串长度的,并不包含字符串最后的'\0'。如果遇到'\0',就认为本字符串结束。
【规则1-16】单纯的char类型应该只用于字符值的存储和使用;有符号的和无符号的“char”型变量只能用于数值的存储和使用。
【规则1-17】所有无符号型常量都应该带有字母U后缀。
7.if,else组合
- bool变量与“零值”进行比较。
if(bTestFlag)
if(!bTestFlag)
- float变量与“零值”进行比较。
if( (fTestVal >= -EPSION)&&(fTestVal <= EPSION)) //EPSION为定义好的精度
- 指针变量与“零值”进行比较。
if(NULL == p)
if(NULL != p)
【规则1-18】先处理正常情况,再处理异常情况(如果把执行概率更大的代码放到后面,也就意味着if语句将进行多次无谓的比较)
【规则1-19】所有的 if-else 结构应该由else子句结束(对最后的else语句的要求是保护型编程。试想if-else结构没有列举出所有的情况,而程序此时必须有形影的操作)
【建议】把空语句写成 NULL;
if (NULL != p) ;
fun();
8.switch,case组合
case后面只能是整型或字符型的常量或常量表达式。
【规则1-20】每个case语句后不要忘了加break;
【规则1-21】最后必须使用default分支
【规则1-22】switch case组合中禁止使用return语句(这点还没搞懂)
【规则1-23】按字母或数字顺序排列各条case语句
【规则1-24】把正常情况放到前面,异常情况放到后面(一般而言,异常情况出现的情况相对较少,故将其放在后面)
【规则1-25】按执行频率排列case语句
【规则1-26】将default语句只用于检查真正的默认情况
9.do,while,for关键字
【建议1-27】在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在外层,减少CPU跨切循环层的次数
【建议1-28】for语句的循环控制变量的取值采用“半开半闭区间”
【建议1-29】不要在for循环体内修改循环变量,防止循环失控
【建议1-30】循环嵌套控制在3层以内
【规则1-31】for语句的控制表达式不能包含任何浮点类型的对象(舍入误差和截取误差会通过循环的迭代过程传播)
10.关键字 void
void *为空类型指针,可以指向任何类型的数据。
void真正发挥的作用在于:对函数返回的限定;对函数参数的限定。
任何类型的指针都可以直接赋值给 void *,无需进行强制转换,如
void *p1;
int *p2;
p1=p2;
【规则1-32】如果函数没有返回值,那么应将其声明为void类型
【规则1-33】如果函数无参数,那么应声明其参数为void
【规则1-34】如果函数的参数可以是任意类型指针,那么应声明其为 void *
11.关键字const
const修饰的是只读的变量,其值在编译时不能被使用,因为编译器在编译时不知道其存储的内容
const修饰的只读变量必须在定义的同时初始化。
const int *p; //p可变,p指向的对象不可变
int const *p; //p可变,p指向的对象不可变
int * const p; //p不可变,p指向的对象可变
const int * const p; //p不可变,p指向的对象不可变
先忽略类型名,const里那个近就修饰哪一个(离指针p近,p不可变;离*p近,对象不可变)。
修饰函数的参数,不希望这个参数值在函数体内被改变
void Fun(const int *p);
修饰函数的返回值,返回值不可改变。
const int Fun(void)
12.关键字 extern
extern可以置于变量或函数前,以表明变量或函数的定义在别的文件中,提示链接器遇到此变量或函数时在其他模块中解析/绑定次标识符。
13.关键字 struct
将一些相关联的数据打包成一个整体,方便使用。
【建议】要求函数的参数尽量不多于4个,这是可以用结构体压缩参数个数
14.关键字 union
一个union只配置一个足够大的空间来容纳最大长度的数据成员。
15.关键字 typedef
typedef struct student
{
//code
}Stu_st,*Stu_pst;
如上,typedef就是给“struct student{/*code*/}”取了个别名叫“Stu_st”;
同时给“struct student{/*code*/} *”取了个别名叫“Stu_pst”
2013-08-26
《C语言深度解剖》学习笔记之关键字的更多相关文章
- 【转】 C语言深度解剖读书笔记(1.关键字的秘密)
本文出处:http://blog.csdn.net/mbh_1991/article/details/10149805 开始本节学习笔记之前,先说几句题外话.其实对于C语言深度解剖这本书来说,看完了有 ...
- C语言深度解剖读书笔记
开始本节学习笔记之前,先说几句题外话.其实对于C语言深度解剖这本书来说,看完了有一段时间了,一直没有时间来写这篇博客.正巧还刚刚看完了国嵌唐老师的C语言视频,觉得两者是异曲同工,所以就把两者一起记录下 ...
- C语言深度解剖读书笔记(6.函数的核心)
对于本节的函数内容其实就没什么难点了,但是对于函数这节又涉及到了顺序点的问题,我觉得可以还是忽略吧. 本节知识点: 1.函数中的顺序点:f(k,k++); 这样的问题大多跟编译器有关,不要去刻意追求 ...
- c语言深度解剖(笔记)
1.1最宽恒大量的关键字----auto 函数内部变量,限制作用域为这个 1.2.1最快的关键字---- register函数. 关键字请求编译器尽可能的将变量存在 CPU 内部寄存器中 1.2.2使 ...
- R语言与机器学习学习笔记
人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经网络由大量的人工神经元联结进行计算.大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自 ...
- go语言,golang学习笔记4 用beego跑一个web应用
go语言,golang学习笔记4 用beego跑一个web应用 首页 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/ 更新的命令是加个 -u 参数,g ...
- go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量
go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量 下载安装:go get github.com/astaxie/beego 首页 - beego: 简约 & 强大并存 ...
- go语言,golang学习笔记2 web框架选择
go语言,golang学习笔记2 web框架选择 用什么go web框架比较好呢?能不能推荐个中文资料多的web框架呢? beego框架用的人最多,中文资料最多 首页 - beego: 简约 & ...
- go语言,golang学习笔记1 官网下载安装,中文社区,开发工具LiteIDE
go语言,golang学习笔记1 官网下载安装,中文社区,开发工具LiteIDE Go语言是谷歌2009发布的专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速 ...
- R语言与显著性检验学习笔记
R语言与显著性检验学习笔记 一.何为显著性检验 显著性检验的思想十分的简单,就是认为小概率事件不可能发生.虽然概率论中我们一直强调小概率事件必然发生,但显著性检验还是相信了小概率事件在我做的这一次检验 ...
随机推荐
- PHP--http_build_query--把数组化成&key=value方式
- Clash Credenz 2014 Wild Card Round题解
A题 简单模拟. /************************************************************************* > File Name: ...
- POJ1151 离散化求矩形面积的并
/*第一道离散化的题目,虽然是水题,不过还是很高兴...*/ #include<cstdio> #include<algorithm> #include<cstring& ...
- http方式nginx 访问不带www的域名301重定向跳转到www的域名帮助seo集中权重
比如我需要吧gucanhui.com重定向301跳转到www.gucanhui.com 需要在nginx的con发文件中加入一段 server { listen ; server_name gucan ...
- Amazon EBS的功能更新
Amazon EBS(Elastic Block Store.简称EBS) 为 Amazon EC2 实例提供块级存储服务.EBS 卷须要通过网络訪问,而且能独立于实例的生命周期而存在.也就是说假如E ...
- day38 07-Spring框架Bean的时候方式
Spring是自动帮我们创建对象的,有几种创建Bean的方式呢? 构造方法实例化:(默认无参数)其实就是反射new Instance(). 静态工厂实例化: 实例工厂实例化: 一般不会改变它实例化的方 ...
- 洛谷P1052 过河
P1052 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上. 由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青 ...
- Leetcode59. Spiral Matrix II螺旋矩阵2
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, ...
- js的DOM节点操作:创建 ,插入,删除,复制,查找节点
DOM含义:DOM是文档对象模型(Document Object Model,是基于浏览器编程的一套API接口,是W3C出台的推荐标准.其赋予了JS操作节点的能力.当网页被加载时,浏览器就会创建页面的 ...
- 二分查找(BinSearch)的Javascript实现
二分查找 解析:二分查找,也为折半查找.对于一个从小到大排列的有序数组,首先要找到一个中间值,通过与中间值比较,大的放又,小的放在左边.再在两边中寻找中间值,持续以上操作,直到找到所在位置为止. 1. ...