C的深度解剖学习笔记(1)----C关键字

本文深入讲解C语言的基础概念,包括关键字如auto、register、static、sizeof等的使用方法及注意事项,探讨了局部变量与全局变量的区别,以及如何通过头文件进行多文件间的变量和函数调用。此外,还介绍了基本数据类型的取值范围与存储方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1 C语言关键字---auto、register

2 C语言关键字static、sizeof

3 C语言关键字---signed、unsigned

4 if else组合


1 C语言关键字---auto、register

1.1 关键字分类

C语言一共有32个关键字(C90/C89),C99后新增5个关键字,但主流编译器对C99支持并不好,因此,默认有32个C语言关键字

1.2 第一个C语言程序

编译:将文本代码->可执行程序(二进制文件)->双击启动该程序(.exe)

(1)在windows中,双击的本质是运行程序,将程序加载到内存中;

(2)任何程序在被运行之间都必须被加载到内存中;

(3)程序没有被加载的时候,在硬盘当中,内存速度大于硬盘(外部存储器)

1.3 定义与声明

1、变量的本质---在内存中开辟特定大小的空间,用来保存数据

函数体内的变量都是要在函数运行之后开辟空间的,所有变量,本质都是要在内存中的某个位置开辟空间的,不可能是在硬盘之中

2、为什么需要变量---因为有数据需要暂时被保存起来,等待后续处理

3、定义:开辟空间,这个动作只能有一次

4、声明:告知,声明可以多次,声明不开辟空间,不可以赋值

1.4 局部/全局变量

1、局部变量:包含在代码块中的变量叫局部变量,局部变量具有临时性,进入代码块,自动形成局部变量,退出代码块自动释放,“函数中的变量为局部变量----不准确”

2、全局变量:在所有函数外定义的变量,叫做全局变量,全局变量具有全局性

3、代码块:用{}括起来的区域,就叫做代码块

1.5 变量的生命周期

1、生命周期:变量从定义到被释放的空间范围,所谓释放,指的是曾经开辟的空间“被释放”

2、局部变量:进入代码块---形成局部变量(开辟空间),退出代码块---释放局部变量

3、全局变量:定义完成后,程序运行的整个生命周期内,该变量一直都有效

作用域----变量的有效区域;生命周期---时间的概念

1.6 auto---最宽宏大量的关键字

(1)一般在代码块中定义变量,即局部变量,默认都是auto修饰的,不过一般省略;

(2)并不是默认所有变量都是auto,一般用来修饰局部变量,auto不可以修饰全局变量

(3)局部变量,自动变量,临时变量---统称为局部变量

1.7 register---最快的关键字

1、 register修饰变量,尽量将所修饰变量,放入CPU寄存区中,从而达到提高效率目的

2、以下变量可以采用register---register修饰的,没有内存地址,不可以被寻址,可以被写入

(1)局部的(全局会导致CPU寄存器被长时间占用);

(2)不会被写入的(写入就需要访问内存,register没有意义);

(3)高频被读取的(提高效率);(4)不可以大量使用,寄存器数量有限;

该关键字不用管,现在的编译器会自动进行代码效率优化,不需要手动优化

2 C语言关键字static、sizeof

2.1 多文件调用,头文件

1、(.h)头文件的必要性

(1)两个源文件之间,共同使用变量时,要不断的声明变量,单纯的使用源文件,组织项目结构的时候,项目越大越复杂的时候,维护成本会变得越来越高;

(2).h:头文件,减少大型项目的维护成本问题

(3)解决头文件被重复包含的方法:,h文件开头#pragram once

2、(.h)头文件组成

(1)C头文件;(2)所有变量声明;extern关键字(必须都带上extern,与变量定义区分)

(3)所有函数声明,建议extern;(4)#define、类型typedef,struct

3、<>C语言头文件,“”自定义头文件

2.2 static---项目维护,提供安全保证

1、修饰全局变量

(1)全局变量可以跨文件访问,函数也可以跨文件访问;

(2)static修饰全局变量,只能在本文件被访问,不能被其他文件直接访问;

(3)static修饰函数,该函数只能在本文件内访问,不能被外部文件直接访问;

(4)static不影响变量的生命周期,但影响作用域

2、修饰局部变量

(1)局部变量本身具有临时性,函数调用---开辟空间;函数结束---释放

(2)static修饰局部变量,更改局部变量的生命周期,临时变量->全局变量,作用域不变

2.3 基本数据类型

2.4 sizeof---关键字、操作符

(1)sizeof(变量名);sizeof(类型名);sizeof 变量名;均正确-----sizeof 类型名,不对

(2)sizeof不仅可以求语言内置类型大小,也可求自定义类型

2.5 为什么要有类型---一整块内存使用,存在浪费,本质对内存进行合理化划分,按需存取

类型种类---应用场景不同,计算方式不同,需要空间大小不同

本质---用最小成本解决各种多样化的场景问题

2.6 变量命名规则

(1)直观可以拼读,见文知意;

(2)符合“min-length&&max-information”原则,较长单词省去“元音”形成缩写;

(3)每个词的第一个字母大写,“大驼峰”命名

(4)尽量避免出现数字编号;

(5)不得出现仅靠大小写区分的相似的标识符;

(6)所有宏定义、枚举常数、只读变量全用大写字母命名,用下划线分割单词;

(7)定义变量一定要初始化,不然会随机值;

3 C语言关键字---signed、unsigned

3.1 大小端字节存储

1、大端:按照字节为单位,低权值位数据存储在高地址;

2、小端:按照字节为单位,低权值位数据存储在低地址;

大小端存储方案,本质数据和空间按照字节为单位的一种映射方式

3.2 数据类型取值范围

1、所谓的特定数据类型,能表示多少个数据,取决于,多个比特位对应的排列组合的个数

2、unsigned char表示[-128,127],1000 000不表示负0,作为表示-128,第一个为符号位

3、-128---原码1 1000 000---反码1 0111 1111---补码1 1000 0000,这是9个bit位,放入char类型8个bit位,发生“截断”,变成---1000 0000,因此,1000 0000用来表示-128

4、char[-2^7,2^7-1][-128,127];short[-2^15,2^25-1];int[-2^31,2^31-1]

3.3 strlen函数计算字符串,以‘\0’为结束,‘、0’不计入

3.4 %d---有符号整型数;%u,无符号整型数

3.5 unsigned int i;

for(i=9;i<=0;i--)

printf("%u\n",i);//此程序会陷入死循环

3.6 规则:所有无符号型常量都应该带有字母U后缀

unsigned int b=10u;

4 if else组合

4.1 语句---C语言中由一个分号;隔开的就是一条语句;

表达式---C语言中,用各种操作符把变量连接起来,形成有意义的式子

C语言中,0为假,非0为真

int flag=1;

if(flag==1){//1、先执行()中的表达式(函数),得到真假结果(逻辑结果)

//2、If条件判定功能//3、进行分支功能

        printf("hello world\n");

}

4.2 bool类型

1、C语言中在C89/C90是没有,但是C99引入了_Bool类型,但是在新增头文件<stdbool.h>中,被宏定义为bool,为了保证C/C++兼容性;

2、目前还是以C89/C90为主流,仅仅用以拓展知识面

3、bool类型值为true/false,大小为一个字节

总结:优先使用C90,如果非要使用bool,推荐C99标准,不推荐微软自定义

推荐:if(!flag)printf("3\n");

4.3 浮点数

1、浮点数在C语言中,默认以double类型存储;

float a=3.6;会有精度损失(可能变大,也可能变小)警告,可以float a=3.6f不会有警告;

!!!浮点数在比较的时候,绝对不能直接使用==!!!

浮点数本身有精度损失,导致各种结果有细微的差别

2、浮点数的比较---范围精度比较

//伪代码
if(x-y)>-精度&&(x-y)<精度{}

//伪代码---精简版
if(fabs(x-y)<精度){//fabs是浮点数求绝对值}

#include <float.h>//使用以下两个精度,包含该头文件
DBL_EPSILON//double 最小精度
FLT_EPSILON//float 最小精度

#include <stdio.h>
#include <math.h>//包含math.h,使用fabs函数
#include <float.h>//使用系统精度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值