C语言深度解析——笔记

前言

按照这个作者的说法,C语言没有表面的上的那么简单,他并不是只有简单的数组,指针,函数这些东西,他还有很多我们需要注意的东西

关键字

C语言一共有32个关键字,其中最容易搞错的就是sizeof这个关键字,本人在未读这本书的时候,曾经也在man手册中man了sizeof,没有查询到,当时还比较困惑,但是没有多想。
表(1.1)C 语言标准定义的 32 个关键字
关键字 意 义
auto 声明自动变量,缺省时编译器一般默认为 auto
int 声明整型变量
double 声明双精度变量
long 声明长整型变量
char 声明字符型变量
float 声明浮点型变量
short 声明短整型变量
signed 声明有符号类型变量
unsigned 声明无符号类型变量
struct 声明结构体变量
union 声明联合数据类型
enum 声明枚举类型
static 声明静态变量
switch 用于开关语句
case 开关语句分支
default 开关语句中的“其他”分支
break 跳出当前循环
register 声明寄存器变量
const 声明只读变量
volatile 说明变量在程序执行中可被隐含地改变
typedef 用以给数据类型取别名(当然还有其他作用)
extern 声明变量是在其他文件正声明(也可以看做是引用变量)
return 子程序返回语句(可以带参数,也可不带参数)
void 声明函数无返回值或无参数,声明空类型指针
continue 结束当前循环,开始下一轮循环
do 循环语句的循环体
while 循环语句的循环条件
if 条件语句
else 条件语句否定分支(与 if 连用)
for 一种循环语句(可意会不可言传)
goto 无条件跳转语句
sizeof 计算对象所占内存空间大小

定义和声明的区别

定义分配了内存,而声明没有分配内存

最快的储存类型register

register:这个关键字要求将变量尽可能放入寄存器中,这样可以提高他的访问速度,但是要是你定义了很多,可能就轮不上你了。他只是尽可能
寄存器:就是一个个小的储存空间,他离cpu很近,他的存取速度很快,当然他的价格是很贵的,不可能都把存储换成寄存器的
虽然寄存器的速度很快,但是他只能储存单个数字,而且要小于一个整型,同时他的存储不在内存中,不能使用&来获得他的内存

static

是指将一个数值存入一块静态内存中,函数结束这个变量也不会被销毁
第二个作用用来修饰函数的时候,表示函数只能在自己的文件中调用,同样不用担心自己的文件会和别人重名

switch ,case组合

这里要说的主要就是case后面只能跟整形,字符串常量,常量表达式

同样的case语句在情况比较多的时候,应该有一定的排序,有如下的规则

  1. 按字母或数字顺序排列各条 case 语句。
  2. 把正常情况放在前面,而把异常情况放在后面。
  3. 按执行频率排列 case 语句
  4. 简化每种情况对应的操作。
  5. 不要为了使用 case 语句而刻意制造一个变量。
  6. 把 default 子句只用于检查真正的默认情况。

void类型

viod其实没有什么,就是表示空,他要说用处的话就是用在函数的返回值上,它可以定义一个void * 指针,它可以赋值给任何指针,非常方便,就比如我们常用的malloc函数
void不能代表一个真实的变量,他只是一个抽象的变量,像 void a就是不合法,所以的数据都应该有属性的

const类型

const 类型修饰的变量为只读变量,编译器通常不为普通 const 只读变量分配存储空间,而是将它们保存在符号表中,这使 得它成为一个编译期间的值,没有了存储与读内存的操作,使得它的效率也很高。 const从汇编的角度来看,只是给出了地址,而没有给出立即数

const修饰指针

constint *p; // p 可变,p 指向的对象不可变
int const p; // p 可变,p 指向的对象不可变
int * const p; // p不可变, p 指向的对象可变
const int
const p; //指针 p 和 p 指向的对象都不可变
一般修饰指针的时候记住一个原则就好了,就是const离哪个近,哪个就是不能改变的

最易变的关键字----volatile

它可以提供对特殊地址的稳定访问,因为在他的修饰下,编译器每次都要从内存中去取值,而不是在平常的情况下,只有他不为左值就不会从内存中取值,如果 这个变量是一个寄存器变量或者表示一个端口数据或者是多个线程的共享数据,就容易出错,所以说 volatile 可以保证对特殊地址的稳定访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值