C语言笔记-5-语法-32个关键字及对应功能解析

C语言笔记-5-语法-32关键字及对应功能解析



前言

自学笔记,没有历史知识铺垫(省略百度部分),C语言32个关键字及对应功能解析


一、32个关键字列表

C语言32个关键字

二、关键字解析

通用关键字

1.sizeof 计算数据类型的长度

int main(){
	int a;
	printf("a size is:%d\n",sizeof(a));
	return 0;
}

3.void 占位符

语义意义,占位符,通常用在返回值/参数/声明占位数据

数据类型关键字

1.char 字符数据类型

char为软件操作的最小单位,大小为1Byte,包含8个bit(bit为硬件操作最小单位,一个bit可以表示高低电平)

  1. 通常用于软件与硬件数据交互的最小单位
  2. ASCII码表的每个字符同样为 8bit即1Byte

2.int/long/short 整数型数据类型

假设CPU一次周期满负荷作为最优处理大小

CPU位数周期最大处理单位数据类型所占大小最大值
64位64bitint(非最优)4B2147483647
32位32bitint4B2147483647
16位16bitint2B65535

int所占位数与CPU有关,也与语言和编译器有关,CPU位数一般作为上限(非绝对)

long和short作为对int的缺陷所补充的数据类型
long可以存储更大的值,在64位处理器中可以达到一次周期满负荷处理
short可以存储更小的值,32位占2B,16位占1B

3.float/double 浮点型数据类型

float 4B
double 8B

4.unsigned/signed 无符号/有符号

标记数据的最高字节是符号位还是无符号位(数据)
有符号signed 127: 0111 1111
无符号unsigned 255: 1111 1111

自定义数据类型关键字

当编译器默认的内存分配不符合实际资源形式阅读规范成本时使用
自定义 = 基础元素的集合

1.struct 结构体

struct所占用的内存大小,会因struct中的成员变量顺序而不同
原因:
编译器会根据struct中成员变量所占的大小,顺序相加(根据系统不同,相加大于2/4/8字节时,两个成员变量会各自开辟最大字节空间),成员变量的顺序会影响大小,struct的大小一定是4的倍数

struct特点

  1. 字节对齐(上述情况)
  2. 位域(顺序成员变量相加小于系统对应字节数时,占用空间会相加填充为2/4/8字节)(上述情况)
struct LedSignal{
	unsigned int switchSignal;
	unsigned int colorSignal;
	unsigned int intervalSignal;
};

struct LedSignal ledSignal;
// typedef struct 联合使用,声明struct时,无需重复写struct该关键字
typedef struct LedSignal{
	unsigned int switchSignal;
	unsigned int colorSignal;
	unsigned int intervalSignal;
};

LedSignal ledSignal;

2.union 共用体

与struct类似的方法创建复杂数据结构,区别:
共用体中所有变量的内存起始地址相同,意味着修改其中任意一个属性的值,可能会影响其他属性的值
内存段会被覆盖

union LedSignal{
	unsigned char switchSignal;
	unsigned int colorSignal;
	unsigned float intervalSignal;
};

union LedSignal ledSignal;

3.enum 枚举

常量集合的概念,C中枚举的约束力很低,约定最好将该枚举可能的范围全部定义,如一周7天
嵌入式中可以将不同芯片的功能做不同的枚举区分和封装,便于阅读

enum WeekEnum
{
    MON = 1,
    TUE,
    WED,
    THU,
    FRI,
    SAT,
    SUN
};
enum WeekEnum week;
int main()
{	
	//Tue:2
    printf("Tue:%d\n", TUE);
    week = MON;
    //Mon:1
    printf("Mon:%d\n", week);
    week = SUN;
    //Sun:7
    printf("Sun:%d\n", week);
    week = 800;
    //800:800 enum没有限制,但约定需要限制这种情况
    printf("800:%d\n", week);
    
    return 0;
}

4.typedef 别名 _t结尾

不是新建的数据类型,而是对已有的数据类型起别名
用于描述物理功能的数据类型(与变量名概念一致,如果分等级,则别名变量名级别高一级)如描述身高的别名int_heigh_t

规范
typedef创建的别名使用 _t 结尾,表示该数据类型位别名创建

typedef int int_heigh_t;

int main()
{
    int_heigh_t aHeight = 180;
    int_heigh_t bHeight = 191;
    //a身高:180,b身高:191
    printf("a身高:%d,b身高:%d",aHeight,bHeight);
    return 0;
}

逻辑结构关键字

CPU 是顺序执行程序,逻辑结构可以通过代码调整CPU的执行顺序,如分支选择/循环
逻辑结构关键字大部分语言都是通用的,此处记录不会太详细

1. if/else 判断选择

if(true){
	//do some
}else{
	//do some
}

2.switch/case/default 多分支选择

C语言中 switch的条件只能传入整型

int product_type;

switch(product_type){
	case 1:
		//do some
		break;
	case 2:
		//do some
		break;
	default:
		//do some	
}

3. do while / while /for 循环

for 次数条件时使用
while 判断条件时使用
do while 先执行再判断条件时使用

4.continue/break/goto/return 跳过/跳出/跳到/结束

continue和break 跳过/跳出循环时使用
goto 一般在函数内部使用,使用较少
return 有返回值函数或者立刻结束函数时使用

类型修饰符关键字

资源使用位置的限定

1.auto 动态修饰符

默认添加auto
int a;
auto int a;

注意:
1.如变量名在函数中,则使用范围为该函数;在函数外的文件中,则使用范围为该文件
2.如果在函数中,则内存位置在栈空间中

2.register 寄存器修饰符

限制变量定义在寄存器上的修饰符
register int a;

寄存器中运行速度比内存快N倍,如果频繁访问的变量,可以存放在寄存器中

注意:
1.寄存器越大,CPU越贵,当然相对而言,速度也越快
2.声明register后不一定都会在寄存器中使用,编译器只会尽量去安排,受寄存器容量的限制
3. &取址时,对register不起作用(编译报错)(寄存器和存储器内存地址不同)

3.static 静态修饰符

修饰位置:

  1. 局部变量 ->局部静态变量
    作用:局部静态化,该变量将存储在静态数据区,生命周期与程序一致
  2. 全局变量 ->全局静态变量
    作用:防止重命名,仅本文件内可访问
  3. 函数 ->静态函数
    作用:防止重命名,仅本文件内可访问

作用:

  1. 隐藏与隔离
  2. 持久化变量内容

static变量及其作用,C语言static变量详解

4.extern 外部声明修饰符

作用:

  1. 定义变量点之前可以使用该变量,全局变量
    extern关键字,C语言extern关键字用法详解

5.const 常量修饰符

1.约定只读变量,约定不允许修改,实际上C语言可以通过指针进行修改
2.实际内存位置在读写区域,而不是只读区域,并不是真正常量

6.volatile 特征修饰符

作用:

  1. 阻止编译优化(阻止指令重排,单例中使用较多)
  2. 内存可见

场景:
外部硬件交互

总结

本章主要为C语言32个关键字及对应功能解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值