当前位置: 首页 > news >正文

【C语言】c语言基础知识梳理(超全)

C语言基础知识梳理

零、概述

一、变量和基本类型

(一)基本类型

1、有符号常见类型大小及其范围

2、浮点数范围来由及其有效数字

3、字面值常量

(1)十进制字面值

(2)浮点数字面值

(3)指定字面值类型

4、字符和字符串常量

5、总结

(二)变量

1、定义变量

2、常用特殊前缀

3、数组与初始化变量

4、变量作用域

(1)局部变量与全局变量的差别

(三)字符串

(四) 自定类型——结构体

二、表达式

三、语句

(一)条件语句

1、if语句

2、switch语句

(二)迭代语句

1、while语句

2、do while语句

3、for语句

(三)跳转语句

四、函数

(一)函数一般格式

(二)函数声明

(三)结构体中的函数

五、指针

(一)定义

(二)结构体与指针

(三)数组与指针

六、文件读取

(一)文本文件

(二)二进制文件

七、编译预处理指令与.h文件

(一)编译预处理指令

1、# include < stdio.h >

2、#define 名称 操作(宏定义)

3、(补充)inline内联函数

(二).h文件

(三)一些常用宏

八、常用函数

(一)常用函数

(二)scanf和printf

零、概述

写此篇博客的目的主要是为了梳理一下c语言基础知识,因为不会像c语言教程那样有很多例子,或者按照初学c语言的顺序,所以不推荐刚学习c语言的人阅读。(期末复习可以看看)

本篇文章有什么:

对c语言系统的梳理

对一些使用的细节进行梳理

解答对使用c语言时产生的一些疑惑

本篇内容基于“C语言程序设计-浙江大学-翁恺”、“C++ Primer”部分内容以及个人理解进行梳理,不充分之处欢迎指出

一、变量和基本类型

(一)基本类型

1、有符号常见类型大小及其范围

1byte(字节)=8bit(位);每个bit就是一个0或者1,byte是c语言里面数据的最小单位

常用2的次方:

27=128

28=256

215=32,768

216=65,536

231=2,147,483,648‬

232=4,294,967,296

263=9,223,372,036,854,775,808‬

264=18,446,744,073,709,551,616

类型 含义 32位编译器中大小(一般) 64位编译器中大小(一般) 最小值(32位) 最大值(32位)

bool(stdbool.h) 布尔类型 1byte 1byte false true

char 单个字符 1byte 1byte -27 27-1

short 短整形 2byte 2byte -215 215-1

int 整形 4byte 4byte -231 231-1

long 长整形 4byte 8byte -231 231-1

long long 长整形 8byte 8byte -263 263-1

float 单精度浮点数 4byte 4byte -2127 2128

double 双精度浮点数 8byte 8byte -21023 21024

long double 扩展精度浮点数 12byte 16byte -216383 216384

char* 字符常量或字符串常量 4byte 8byte 无意义 无意义

2、浮点数范围来由及其有效数字

这里单独讨论一下浮点数的取值范围,浮点数都遵循IEEE754标准,所以:

4*8=32位的float的第1位是符号位,第29位有8位是指数位,第1032位有23位是尾数位

那么可以很容易看到float的范围是[-12127≈1.71038, 12128≈3.41038]

因为转换成IEEE754都要进行标准化,也就是将原来的整数点整数的形式转化成二进制点二进制的形式,然后将点的位置移动到左边第一个1(2)之后,产生指数位。规定点之后的数填在尾数位上,所以31位前暗含了1(2),所以上面的范围会先乘个1。

32位的指数位 = 移位数(左移一位+1,右移一位-1)+ 127得出。所以负数只有127(127-127=0),而正数有128(127+128=255)

8*8=64位的double的第1位是符号位,第212位有11位是指数位,第1364位有52位是尾数位

那么可以很容易看到float的范围是[-121023≈8.98810307, 121024≈1.79769310308]

128=96或168=128位的long double的第1位是符号位,第216位有15位是指数位,在32位系统中第1796位有80位是尾数位,在64位系统中第17~128位有112位是尾数位,那么范围是[-1216383≈5.9104931, 1216384≈1.1897104932](与尾数大小无关)。

其实float的范围就已经非常非常大了,那为什么还会有double甚至long double呢,这是因为浮点数能准确记录量级,但是无法准确记录太长的数字,数字的有效位数值取决于尾数位的长度,我们可以总结成下表:

类型 有效位数计算 有效位数

float 223+1=16,777,216 8-1=7

double 252+1=9,007,199,254,740,992‬ 16-1=15

long double 280+1=2.410 24 / 2112+1=1.0381034 25-1=24 / 35-1=34

3、字面值常量

(1)十进制字面值

对于一个20(10)=24(8)=14(16),在c语言中对应表达为20(10进制)、024(8进制)、0x14(16进制)。

默认情况下,十进制字面值的类型是int,如果int装不下就是long,再装不下就是long long。

(2)浮点数字面值

对于一个浮点数可以表示为314.159(10)也可以表示为3.14159e+2(科学记数法)。

默认情况下,浮点数字面值是一个double

(3)指定字面值类型

整形字面值

后缀 最小匹配类型 例子

u / U unsigned 20u / 20U

l / L long 20l / 20L

ll / LL long long 20ll / 20LL

浮点形字面值

f / F float 20.0f / 20.0F

l / L long double 20.0l / 20.0L

4、字符和字符串常量

形如’a’、"HelloWorld"都可以看作是常量,特别说明当例如char* s1=“HelloWorld”;char* s2=“HelloWorld”;时,s1和s2所指的都是内存中代码段的常量,可读不可写且地址相同,类似于const char* s1;

字符是以单引号’括住的单个字符,只占一个char(一个byte)

字符串以双引号"括住一系列字符,最后隐含了’\0’,所以占n+1个char(n为字符串有意义的长度)

特殊的常量:无穷,每个编译器的表示都不一样,可以使用如下代码输出:

printf(“%f\n”, 1/0.0); // 无穷大。我的电脑上为:1.#INF00

printf(“%f\n”, -1/0.0); // 无穷小。我的电脑上为:1.#INF00

printf(“%f\n”, 0.0/0.0); // 空。我的电脑上为:-1.#IND00

5、总结

有符号的类型(除浮点数)的范围都是由[-2n-1, 2n-1-1](n为类型所占bit)

无符号的类型(除浮点数)的范围都是由[0, 2n-1](n为类型所占bit)

浮点数的范围与其指数位大小有关,为[-2{[2^(m-1)]-1}, 2[2^(m-1)]](m为指数位位数)

http://www.jsqmd.com/news/1075317/

相关文章:

  • LSTM股票收益率预测实战:从数据清洗到模型部署
  • TVA在物流分拣领域的独特价值(7)
  • 用数据说话!2026年最流行AI论文软件榜单,免费款也能高效产初稿
  • Canonical Livepatch 正式拥抱 Arm64:ARM 服务器终于也能零停机打内核补丁了
  • 从AI用户到建造者:2025年可落地的AI系统工程实践指南
  • Poly Haven Assets:Blender中获取免费3D资源库的终极指南
  • Geoserver表达式注入漏洞CVE-2024-36401:从原理到复现与防御
  • 终极Windows老游戏兼容解决方案:5分钟让经典游戏在Win10/11上完美运行
  • Sketch Measure:告别设计标注痛苦,让协作变得轻松有趣
  • 可以边录边编辑的音乐平台,多款录音修音一体化工具实操分享
  • 网站建设如何适配本地流量?GEO 推广导向型建站逻辑详解
  • AI录音后期处理软件:录歌、修音、剪辑导出一体化工具梳理
  • 为什么创作者要关心 CLI
  • EXTI+定时器消抖:按键中断的正确姿势
  • 终极指南:如何用Blender插件实现Unreal PSK/PSA文件导入导出
  • 三步掌握BilibiliDown:你的B站视频离线宝库
  • Ryujinx:终极Nintendo Switch模拟器完整指南与快速上手教程
  • Hadoop 序列化与 HDFS 连接:从入门到踩坑全记录
  • RLAIF实战指南:用AI反馈替代人工标注的三大技术路径
  • 先引入一个简单的例子,给定一个 4 个节点 4 条边的有向带权图:
  • 临床数据难转化成果?打通临床统计与医工协同的数字化方案
  • ERNIE-Image-Turbo轻量化图像生成与OpenMementos记忆压缩实战
  • WebKitGTK架构下的高效浏览器实现:Midori的模块化设计与性能优化
  • 8 年前的老代码 + 20 刀 AI token = 我的第一款独立产品
  • 应急响应web2
  • Fresco:Facebook 出品的 Android 图片加载库,1.7 万 Star 不是白来的
  • 家用录歌人声降噪美化音乐编辑器工具盘点
  • OBS背景移除插件深度解析:基于ONNX Runtime的实时人像分割技术实战指南
  • 我们是如何管理多环境(开发、测试、生产)配置的?
  • 从规则引擎到大语言模型:NLP范式迁移的工程本质