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或者1byte是c语言里面数据的最小单位常用2的次方271282825621532,76821665,5362312,147,483,6482324,294,967,2962639,223,372,036,854,775,80826418,446,744,073,709,551,616类型 含义 32位编译器中大小(一般) 64位编译器中大小(一般) 最小值(32位) 最大值(32位)bool(stdbool.h) 布尔类型 1byte 1byte false truechar 单个字符 1byte 1byte -27 27-1short 短整形 2byte 2byte -215 215-1int 整形 4byte 4byte -231 231-1long 长整形 4byte 8byte -231 231-1long long 长整形 8byte 8byte -263 263-1float 单精度浮点数 4byte 4byte -2127 2128double 双精度浮点数 8byte 8byte -21023 21024long double 扩展精度浮点数 12byte 16byte -216383 216384char* 字符常量或字符串常量 4byte 8byte 无意义 无意义2、浮点数范围来由及其有效数字这里单独讨论一下浮点数的取值范围浮点数都遵循IEEE754标准所以4*832位的float的第1位是符号位第29位有8位是指数位第1032位有23位是尾数位那么可以很容易看到float的范围是[-12127≈1.71038, 12128≈3.41038]因为转换成IEEE754都要进行标准化也就是将原来的整数点整数的形式转化成二进制点二进制的形式然后将点的位置移动到左边第一个1(2)之后产生指数位。规定点之后的数填在尾数位上所以31位前暗含了1(2)所以上面的范围会先乘个1。32位的指数位 移位数左移一位1右移一位-1 127得出。所以负数只有127127-1270而正数有1281271282558*864位的double的第1位是符号位第212位有11位是指数位第1364位有52位是尾数位那么可以很容易看到float的范围是[-121023≈8.98810307, 121024≈1.79769310308]12896或168128位的long double的第1位是符号位第216位有15位是指数位在32位系统中第1796位有80位是尾数位在64位系统中第17~128位有112位是尾数位那么范围是[-1216383≈5.9104931, 1216384≈1.1897104932]与尾数大小无关。其实float的范围就已经非常非常大了那为什么还会有double甚至long double呢这是因为浮点数能准确记录量级但是无法准确记录太长的数字数字的有效位数值取决于尾数位的长度我们可以总结成下表类型 有效位数计算 有效位数float 223116,777,216 8-17double 25219,007,199,254,740,992 16-115long double 28012.410 24 / 211211.0381034 25-124 / 35-1343、字面值常量1十进制字面值对于一个20(10)24(8)14(16)在c语言中对应表达为20(10进制)、024(8进制)、0x14(16进制)。默认情况下十进制字面值的类型是int如果int装不下就是long再装不下就是long long。2浮点数字面值对于一个浮点数可以表示为314.159(10)也可以表示为3.14159e2(科学记数法)。默认情况下浮点数字面值是一个double3指定字面值类型整形字面值后缀 最小匹配类型 例子u / U unsigned 20u / 20Ul / L long 20l / 20Lll / LL long long 20ll / 20LL浮点形字面值f / F float 20.0f / 20.0Fl / L long double 20.0l / 20.0L4、字符和字符串常量形如’a’、HelloWorld都可以看作是常量特别说明当例如char* s1“HelloWorld”;char* s2“HelloWorld”;时s1和s2所指的都是内存中代码段的常量可读不可写且地址相同类似于const char* s1;字符是以单引号’括住的单个字符只占一个char(一个byte)字符串以双引号括住一系列字符最后隐含了’\0’所以占n1个char(n为字符串有意义的长度)特殊的常量无穷每个编译器的表示都不一样可以使用如下代码输出printf(“%f\n”, 1/0.0); // 无穷大。我的电脑上为:1.#INF00printf(“%f\n”, -1/0.0); // 无穷小。我的电脑上为:1.#INF00printf(“%f\n”, 0.0/0.0); // 空。我的电脑上为:-1.#IND005、总结有符号的类型除浮点数的范围都是由[-2n-1, 2n-1-1]n为类型所占bit无符号的类型除浮点数的范围都是由[0, 2n-1]n为类型所占bit浮点数的范围与其指数位大小有关为[-2{[2^(m-1)]-1}, 2[2^(m-1)]]m为指数位位数
【C语言】c语言基础知识梳理(超全)
发布时间:2026/6/25 14:10:33
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或者1byte是c语言里面数据的最小单位常用2的次方271282825621532,76821665,5362312,147,483,6482324,294,967,2962639,223,372,036,854,775,80826418,446,744,073,709,551,616类型 含义 32位编译器中大小(一般) 64位编译器中大小(一般) 最小值(32位) 最大值(32位)bool(stdbool.h) 布尔类型 1byte 1byte false truechar 单个字符 1byte 1byte -27 27-1short 短整形 2byte 2byte -215 215-1int 整形 4byte 4byte -231 231-1long 长整形 4byte 8byte -231 231-1long long 长整形 8byte 8byte -263 263-1float 单精度浮点数 4byte 4byte -2127 2128double 双精度浮点数 8byte 8byte -21023 21024long double 扩展精度浮点数 12byte 16byte -216383 216384char* 字符常量或字符串常量 4byte 8byte 无意义 无意义2、浮点数范围来由及其有效数字这里单独讨论一下浮点数的取值范围浮点数都遵循IEEE754标准所以4*832位的float的第1位是符号位第29位有8位是指数位第1032位有23位是尾数位那么可以很容易看到float的范围是[-12127≈1.71038, 12128≈3.41038]因为转换成IEEE754都要进行标准化也就是将原来的整数点整数的形式转化成二进制点二进制的形式然后将点的位置移动到左边第一个1(2)之后产生指数位。规定点之后的数填在尾数位上所以31位前暗含了1(2)所以上面的范围会先乘个1。32位的指数位 移位数左移一位1右移一位-1 127得出。所以负数只有127127-1270而正数有1281271282558*864位的double的第1位是符号位第212位有11位是指数位第1364位有52位是尾数位那么可以很容易看到float的范围是[-121023≈8.98810307, 121024≈1.79769310308]12896或168128位的long double的第1位是符号位第216位有15位是指数位在32位系统中第1796位有80位是尾数位在64位系统中第17~128位有112位是尾数位那么范围是[-1216383≈5.9104931, 1216384≈1.1897104932]与尾数大小无关。其实float的范围就已经非常非常大了那为什么还会有double甚至long double呢这是因为浮点数能准确记录量级但是无法准确记录太长的数字数字的有效位数值取决于尾数位的长度我们可以总结成下表类型 有效位数计算 有效位数float 223116,777,216 8-17double 25219,007,199,254,740,992 16-115long double 28012.410 24 / 211211.0381034 25-124 / 35-1343、字面值常量1十进制字面值对于一个20(10)24(8)14(16)在c语言中对应表达为20(10进制)、024(8进制)、0x14(16进制)。默认情况下十进制字面值的类型是int如果int装不下就是long再装不下就是long long。2浮点数字面值对于一个浮点数可以表示为314.159(10)也可以表示为3.14159e2(科学记数法)。默认情况下浮点数字面值是一个double3指定字面值类型整形字面值后缀 最小匹配类型 例子u / U unsigned 20u / 20Ul / L long 20l / 20Lll / LL long long 20ll / 20LL浮点形字面值f / F float 20.0f / 20.0Fl / L long double 20.0l / 20.0L4、字符和字符串常量形如’a’、HelloWorld都可以看作是常量特别说明当例如char* s1“HelloWorld”;char* s2“HelloWorld”;时s1和s2所指的都是内存中代码段的常量可读不可写且地址相同类似于const char* s1;字符是以单引号’括住的单个字符只占一个char(一个byte)字符串以双引号括住一系列字符最后隐含了’\0’所以占n1个char(n为字符串有意义的长度)特殊的常量无穷每个编译器的表示都不一样可以使用如下代码输出printf(“%f\n”, 1/0.0); // 无穷大。我的电脑上为:1.#INF00printf(“%f\n”, -1/0.0); // 无穷小。我的电脑上为:1.#INF00printf(“%f\n”, 0.0/0.0); // 空。我的电脑上为:-1.#IND005、总结有符号的类型除浮点数的范围都是由[-2n-1, 2n-1-1]n为类型所占bit无符号的类型除浮点数的范围都是由[0, 2n-1]n为类型所占bit浮点数的范围与其指数位大小有关为[-2{[2^(m-1)]-1}, 2[2^(m-1)]]m为指数位位数