main函数-程序的入口

主函数有且只有一个

main无参形式
/*
函数名:main
函数参数:无
函数返回值:
返回0:表示函数正常退出
返回非0:表示函数异常退出
*/
int main(void)
{
/* code */
return 0;
}
main有参形式
/*
函数名:main
函数参数:
argc:参数个数
argv:参数数组,每个参数是一个字符串
函数返回值:
返回0:表示函数正常退出
返回非0:表示函数异常退出
*/
int main(int argc, char const *argv[])
{
/* code */
return 0;
}

man帮助手册(九册)

提供命令、函数、系统调用、配置文件等的权威说明

1.Shell命令(默认已安装)
2.系统调用(函数手册 - 这些函数由系统内核直接提供)
3.库函数(函数手册 - 这些函数有标准库提供)
4.特殊文件(通常出现在/dev目录下)
5.文件的特殊格式或协定(例如/etc/passwd的格式)
6.游戏
7.杂项(例如一些宏定义)
8.系统管理员命令(通常只能由管理员执行)
9.非标准内核例程

系统只安装第一册,以下帮助信息一般需要用户自己手动安装

sudo apt-get install manpages
sudo apt-get install manpages-dev
sudo apt-get install manpages-posix
sudo apt-get install manpages-posix-dev

使用技巧

//查看指定命令/函数的手册(自动匹配优先章节)
man [名称] # 例:man cp、man malloc
//查看指定章节的内容
man [章节号] [名称] # 例:man 3 malloc、man 5 sshd_config
//搜索包含关键词的所有手册(-k 表示“keyword”)
man -k [关键词] # 例:man -k "file copy"(搜索与“文件复制”相关的命令)

printf-标准输出

printf原型
/*
函数名:printf
函数参数:
format:格式化字符串
...:可变参数列表,对应格式说明符的具体值
函数返回值:
int 类型,成功时返回打印的字符总数
失败时返回负数
*/
int printf(const char *format, ...);

scanf

scanf原型
/*
函数名:scanf
函数参数:
format:格式化字符串
...:可变参数列表,指向用于存储输入数据的变量地址
函数返回值:
int 类型,成功时返回成功读取并赋值的变量个数
失败时返回EOF(通常为-1),遇到文件结束或错误时返回
*/
int scanf(const char *format, ...);

格式控制符

类型符 含义 示例 输出结果
%d 十进制整数(int printf("%d", 123); 123
%u 无符号十进制整数(unsigned printf("%u", 123U); 123
%x 十六进制整数(小写) printf("%x", 255); ff
%X 十六进制整数(大写) printf("%X", 255); FF
%o 八进制整数 printf("%o", 8); 10
%f 浮点数(float/double printf("%f", 3.14); 3.140000
%c 单个字符(char printf("%c", 'A'); A
%s 字符串(char* printf("%s", "hello"); hello
%p 指针地址 printf("%p", &a); 0x7ffd8a5b9a3c
%% 输出 % 本身 printf("%%"); %

附加格式修饰符

修饰符格式 含义说明 示例代码 输出结果(注:用“□”标记空格,便于查看对齐效果)
%md 输出宽度为 mm 为正整数),不足宽度用空格填充,内容右对齐 printf("%5d", 10); □□□10(共5位,前补3个空格)
%-md 输出宽度为 mm 为正整数),不足宽度用空格填充,内容左对齐 printf("%-5d", 10); 10□□□(共5位,后补3个空格)
%0md 输出宽度为 mm 为正整数),不足宽度用 0 填充(仅对数值有效) printf("%05d", 10); 00010(共5位,前补3个0)
%m.nf 输出总宽度为 m,同时保留 n 位小数,不足总宽度用空格填充 printf("%8.2f", 3.14159); □□□3.14(总8位,小数点后2位,前补3个空格)
%.nf 不限制输出宽度,仅指定保留 n 位小数(宽度随内容自适应) printf("%.3f", 3.14); 3.140(仅保留3位小数,无空格填充)
%*.*f 输出宽度和小数位数由参数动态指定(第一个 * 对应宽度,第二个 * 对应小数位) printf("%*.*f", 8, 2, 3.14); □□□3.14(效果同 %8.2f,参数依次传入宽度、小数位、数值)

基本数据类型

  1. 整型
类型声明 符号属性 占用内存(字节) 取值范围(以对应系统位数为准) 适用场景
char 有符号 1 -128 ~ 127 存储单个字符(ASCII 码)
unsigned char 无符号 1 0 ~ 255 存储无负数值(如颜色值、字节)
short 有符号 2 -32768 ~ 32767 存储较小范围的整数
unsigned short 无符号 2 0 ~ 65535 存储无负的小整数
int 有符号 4 -2147483648 ~ 2147483647 默认整数类型(最常用)
unsigned int 无符号 4 0 ~ 4294967295 存储非负整数(如计数、ID)
long 有符号 4(32 位系统)/ 8(64 位系统) -2147483648 ~ 2147483647(32 位系统) 存储较大范围的整数
unsigned long 无符号 4(32 位系统)/ 8(64 位系统) 0 ~ 4294967295(32 位系统) 存储无负的大整数
long long 有符号 8 -9223372036854775808 ~ 9223372036854775807 存储极大范围的整数(C99 标准新增)
unsigned long long 无符号 8 0 ~ 18446744073709551615 存储无负的极大整数
  1. 浮点型
类型声明 占用内存(字节) 有效数字位数 取值范围(近似) 适用场景
float 4 6~7 位 ±3.4×10^-38 ~ ±3.4×10^38 单精度浮点数(内存占用小,精度要求低)
double 8 15~17 位 ±1.7×10^-308 ~ ±1.7×10^308 双精度浮点数(默认浮点类型,精度要求高)
long double 8/12/16(因编译器/平台而异) 18~19 位 ±3.4×10^-4932 ~ ±1.1×10^4932 高精度浮点数(极少用,如科学计算)
  1. 布尔类型(头文件<stdbool.h>)
类型声明 占用内存(字节) 取值范围 说明
bool 1(通常) true / false true 等价于整数 1,false 等价于整数 0
  • 常量与变量
    • 变量是程序运行中值可以动态变化的内存单元,需声明数据类型,用于存储临时结果、用户输入等可变数据。
    • 常量是值一旦定义就不可修改的标识符,分为字面常量(直接写在代码中的值)和符号常量(用#define或const定义的有名字的常量),用于表示固定不变的数据(如 π 值、配置参数等)。
特性 变量(Variable) 常量(Constant)
定义方式 数据类型 + 变量名(可初始化)
例:int num = 10;
1. 宏常量:#define 常量名 值
例:#define MAX 100
2. 常变量:const 类型 常量名 = 值
例:const float PI = 3.14f
值的可修改性 运行中可通过赋值语句修改
例:num = 20;
定义后不可修改,强行修改会编译报错
数据类型 必须显式声明类型(如 intfloat 宏常量无类型;常变量需显式声明类型
内存分配 定义时分配内存,存储在可读写区域 宏常量不分配内存(预处理阶段直接文本替换);
常变量分配内存(可能在只读区域)
作用域 局部变量:函数/代码块内有效
全局变量:整个程序有效
宏常量无作用域(预处理全局替换);
常变量作用域与变量一致(局部/全局)
生命周期 局部变量:函数/代码块执行期间存在
全局变量:程序运行期间一直存在
宏常量无生命周期(预处理阶段生效);
常变量生命周期与变量一致
初始化要求 局部变量可先声明后赋值(未初始化时为随机值)
全局变量未初始化时默认值为 0
必须在定义时初始化(否则无意义)
典型用途 存储临时数据、用户输入、状态变化等(如计数器、中间结果)

作用域

作用域类型 定义位置 / 方式 有效范围(可见区域) 生命周期(存在时间) 核心特性 典型使用场景
局部变量 函数内部、{} 包裹的代码块(如 if/for 块) 仅在定义它的函数或代码块内,出界后不可访问 函数 / 代码块执行时创建,执行结束后销毁(栈内存) 1. 不同函数 / 块中可同名,互不干扰;2. 未初始化时值为随机值;3. 内存自动回收 函数内临时存储数据(如计算中间值、循环计数器)
函数参数(形参) 函数定义的参数列表中(如 void func(int x) 仅在当前函数内部有效,等同于函数的 “局部变量” 函数被调用时初始化,函数执行结束后销毁(栈内存) 1. 由调用者传入的实参赋值;2. 作用域与函数内局部变量一致;3. 本质是函数的 “输入接口” 函数间传递数据(如向 add(a,b) 传递两个待加数值)
全局变量 所有函数外部(通常在源文件开头) 从定义位置开始,到整个源文件结束,所有函数可访问 程序启动时创建,程序退出时销毁(静态内存) 1. 未初始化时默认值为 0;2. 可通过 extern 关键字跨文件访问;3. 全程序共享 多个函数需共享的数据(如配置参数、全局状态标记,需谨慎使用以避免耦合)
块作用域变量 内层代码块(如 { int b = 2; } 仅在定义它的内层代码块内,出块后不可访问 代码块执行时创建,执行结束后销毁(栈内存) 1. 会屏蔽外层同名变量(局部 / 全局);2. 进一步缩小变量作用范围,减少命名冲突 限制变量作用域(如 for 循环内的计数器 i,仅在循环块内使用,避免污染外部)

注. 同名变量屏蔽规则:当不同作用域的变量同名时,内层作用域变量会屏蔽外层变量(优先级:块作用域 > 函数参数 > 局部变量 > 全局变量)。例如,函数内的局部变量会覆盖同名全局变量,内层代码块的变量会覆盖外层函数的同名变量。

类型转换

类型转换是将一种数据类型的值转换为另一种数据类型的过程,主要用于不同类型数据之间的运算或赋值。

    • 隐式类型转换

      隐式类型转换由编译器自动完成,无需程序员干预,遵循 "低精度向高精度转换" 的原则(避免数据丢失)
    1. 算术运算中的转换

      不同类型数据参与运算时,自动转换为其中精度最高的类型

      转换优先级(从低到高):char → short → int → unsigned int → long → unsigned long → long long → float → double → long double
    1. 赋值运算中的转换

      右值自动转换为左值的类型

      若右值精度高于左值,可能导致数据截断或精度损失
    1. 函数调用中的转换

      实参自动转换为形参的类型
eg
#include <stdio.h>

int main() {
char c = 'A'; // 'A'的ASCII码为65
int i = 100;
float f = 3.14f;
double d = 2.718; // 1. 算术运算转换
int result1 = c + i; // c自动转换为int(65 + 100 = 165)
double result2 = i + f; // i和f自动转换为double(100.0 + 3.14 = 103.14) // 2. 赋值转换
int result3 = f; // f(3.14)转换为int(3),精度损失
float result4 = d; // d(2.718)转换为float(2.718f),可能损失精度 printf("c + i = %d\n", result1); // 输出:165
printf("i + f = %lf\n", result2); // 输出:103.140000
printf("f -> int = %d\n", result3); // 输出:3
printf("d -> float = %f\n", result4); // 输出:2.718000 return 0;
}
    • 显示类型转换

      显式类型转换由程序员手动指定,使用强制转换运算符实现,语法为:(目标类型) 表达式
eg
#include <stdio.h>

int main() {
float f = 3.14159f;
int i = 100;
double d = 2.71828; // 强制转换示例
int num1 = (int)f; // 将float转换为int(3.14159 → 3)
float num2 = (float)d; // 将double转换为float(可能损失精度)
char ch = (char)i; // 将int转换为char(100 → 'd',ASCII码) // 运算中的强制转换
float average = (float)10 / 3; // 10先转换为float,结果为3.333...
int area = (int)(3.14 * 5 * 5); // 先计算再转换,结果为78 printf("(int)3.14159 = %d\n", num1); // 输出:3
printf("(float)2.71828 = %f\n", num2); // 输出:2.718280
printf("(char)100 = %c\n", ch); // 输出:d
printf("(float)10/3 = %f\n", average); // 输出:3.333333
printf("(int)(3.14*5*5) = %d\n", area); // 输出:78 return 0;
}

源码补码反码

编码方式 定义说明 正数表示规则 负数表示规则 示例(以 -3 为例,8 位)
源码 直接用符号位和数值位表示的二进制形式,符号位(最高位)0 表示正,1 表示负 符号位为 0,数值位为二进制绝对值 符号位为 1,数值位为二进制绝对值 10000011
反码 正数与源码相同,负数是对源码的数值位按位取反(符号位不变)得到的编码形式 与源码相同(符号位 0,数值位不变) 符号位为 1,数值位按位取反(0→1,1→0) 11111100
补码 正数与源码相同,负数是对反码加 1(若有进位则丢弃)得到的编码形式,是计算机实际存储整数的方式 与源码相同(符号位 0,数值位不变) 反码 + 1(若反码加 1 后有进位,直接丢弃) 11111101

附- ASCII码

十进制 二进制 字符 说明(控制字符)/ 字符(可打印字符) 十进制 二进制 字符 说明(控制字符)/ 字符(可打印字符)
0 00000000 NUL 空字符 64 01100000 @ 艾特符号
1 00000001 SOH 标题开始 65 01100001 A 大写字母A
2 00000010 STX 文本开始 66 01100010 B 大写字母B
3 00000011 ETX 文本结束 67 01100011 C 大写字母C
4 00000100 EOT 传输结束 68 01100100 D 大写字母D
5 00000101 ENQ 询问字符 69 01100101 E 大写字母E
6 00000110 ACK 确认字符 70 01100110 F 大写字母F
7 00000111 BEL 响铃(告警) 71 01100111 G 大写字母G
8 00001000 BS 退格(Backspace) 72 01101000 H 大写字母H
9 00001001 HT 水平制表符(\t) 73 01101001 I 大写字母I
10 00001010 LF 换行(\n) 74 01101010 J 大写字母J
11 00001011 VT 垂直制表符 75 01101011 K 大写字母K
12 00001100 FF 换页 76 01101100 L 大写字母L
13 00001101 CR 回车(\r) 77 01101101 M 大写字母M
14 00001110 SO 移位输出 78 01101110 N 大写字母N
15 00001111 SI 移位输入 79 01101111 O 大写字母O
16 00010000 DLE 数据链路转义 80 01110000 P 大写字母P
17 00010001 DC1 设备控制1 81 01110001 Q 大写字母Q
18 00010010 DC2 设备控制2 82 01110010 R 大写字母R
19 00010011 DC3 设备控制3 83 01110011 S 大写字母S
20 00010100 DC4 设备控制4 84 01110100 T 大写字母T
21 00010101 NAK 否定应答 85 01110101 U 大写字母U
22 00010110 SYN 同步空闲 86 01110110 V 大写字母V
23 00010111 ETB 传输块结束 87 01110111 W 大写字母W
24 00011000 CAN 取消 88 01111000 X 大写字母X
25 00011001 EM 媒体结束 89 01111001 Y 大写字母Y
26 00011010 SUB 替换 90 01111010 Z 大写字母Z
27 00011011 ESC 转义(Escape) 91 01111011 [ 左方括号
28 00011100 FS 文件分隔符 92 01111100 \ 反斜杠
29 00011101 GS 组分隔符 93 01111101 ] 右方括号
30 00011110 RS 记录分隔符 94 01111110 ^ 插入符号
31 00011111 US 单元分隔符 95 01111111 _ 下划线
32 01000000 (空格) 空格 96 10000000 ` 反引号
33 01000001 ! 感叹号 97 10000001 a 小写字母a
34 01000010 " 双引号 98 10000010 b 小写字母b
35 01000011 # 井号 99 10000011 c 小写字母c
36 01000100 $ 美元符号 100 10000100 d 小写字母d
37 01000101 % 百分号 101 10000101 e 小写字母e
38 01000110 & 和号 102 10000110 f 小写字母f
39 01000111 ' 单引号 103 10000111 g 小写字母g
40 01001000 ( 左括号 104 10001000 h 小写字母h
41 01001001 ) 右括号 105 10001001 i 小写字母i
42 01001010 * 星号 106 10001010 j 小写字母j
43 01001011 + 加号 107 10001011 k 小写字母k
44 01001100 , 逗号 108 10001100 l 小写字母l
45 01001101 - 减号/连字符 109 10001101 m 小写字母m
46 01001110 . 句号 110 10001110 n 小写字母n
47 01001111 / 斜杠 111 10001111 o 小写字母o
48 01010000 0 数字0 112 10010000 p 小写字母p
49 01010001 1 数字1 113 10010001 q 小写字母q
50 01010010 2 数字2 114 10010010 r 小写字母r
51 01010011 3 数字3 115 10010011 s 小写字母s
52 01010100 4 数字4 116 10010100 t 小写字母t
53 01010101 5 数字5 117 10010101 u 小写字母u
54 01010110 6 数字6 118 10010110 v 小写字母v
55 01010111 7 数字7 119 10010111 w 小写字母w
56 01011000 8 数字8 120 10011000 x 小写字母x
57 01011001 9 数字9 121 10011001 y 小写字母y
58 01011010 : 冒号 122 10011010 z 小写字母z
59 01011011 ; 分号 123 10011011 { 左花括号
60 01011100 < 小于号 124 10011100 | 竖线
61 01011101 = 等号 125 10011101 } 右花括号
62 01011110 > 大于号 126 10011110 ~ 波浪号
63 01011111 ? 问号 127 01111111 DEL 删除(Delete)

解码C语言基础的更多相关文章

  1. JavaScript 语言基础

    js语言基础 一 基本知识 UniCode编码 区分大小写(HTML不区分/XHTML区分) Unicode转义序列 \uxxxx (\u加4位16进制表示) 注释 单行注释:// 多行注释:/* * ...

  2. js-day01-js语言基础

    JavaScript简介:JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本 ...

  3. 20165327 学习基础和C语言基础调查

    学习基础和C语言基础调查 一.关于技能 1. 你有什么技能比大多人(超过90%以上)更好? 根据数据来看,应该是短跑(几次测速50米平均时间6.5s),上学期的体测中短跑这项成绩在班上排前面,我们这个 ...

  4. GO学习-(19) Go语言基础之网络编程

    Go语言基础之网络编程 现在我们几乎每天都在使用互联网,我们前面已经学习了如何编写Go语言程序,但是如何才能让我们的程序通过网络互相通信呢?本章我们就一起来学习下Go语言中的网络编程. 关于网络编程其 ...

  5. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...

  6. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...

  7. C#语言基础

    第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...

  8. C语言基础回顾

    第一章 C语言基础 1.  C语言编译过程 预处理:宏替换.条件编译.头文件包含.特殊符号 编译.优化:翻译并优化成等价的中间代码表示或汇编代码 汇编:生成目标文件,及与源程序等效的目标的机器语言代码 ...

  9. 黑马程序员_ C语言基础(二)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述):   1.Hello W ...

  10. C#语言基础— 输入与输出

    C#语言基础— 输入与输出 1.1函数的四要素:名称.输入.输出.加工 1.2主函数:输出语句.输入语句: Static viod Main(string[] stgs)//下划线部分可以自己指定 { ...

随机推荐

  1. 保姆级vmware安装MacOS

    为啥是v10.15 MacOS10.15对硬件的要求很低,一般是不会卡的 准备工作 开始之前,请先完成以下步骤: 你的计算机中装有VMware Workstation 15及以上版本, 并确定你的磁盘 ...

  2. TypeScript枚举类型应用:前后端状态码映射的最简方案

    介绍 这篇文章来谈一下 TypeScript 中的枚举类型(Enum)以及一些最佳实践.事情的起因是这样的,今天看到自己之前写的一段代码,感觉不是很好,于是想优化一下,期间用到了枚举类型,遂记录一下. ...

  3. 前端开发系列122-进阶篇之Floating point addition

    本文简单说明 JavaScript 中常见的进制转换函数以及浮点数计算的注意点. 如何把任意进制的数据转换为十进制? 假设我们有二进制数据110,如果要把该数据转换为十进制数据可以参考下面的处理过程. ...

  4. leetcode 53 最大自序列和

    简介 暴力只要变量两遍, 挺好的, 不过更好的应该是动态规划. 应该是最简单的动态规划了吧 code class Solution { public: int maxSubArray(vector&l ...

  5. 利用gitblit创建本地Git仓库

    最近有个子项目,还未正式在服务器上进行开发环境设置,提出先本地设置Git仓库,于是开始搞这个: 首先是去gitblit官网进行软件工具下载 软件下载好解压后,运行gitblit.cmd 出现8843端 ...

  6. Web前端入门第 79 问:JavaScript async & await 的异步任务进化之路

    JS 中异步任务随处可见,比如: 1.用户交互的点击.输入 2.网络请求的 fetch.ajax.WebSocket 3.资源中的图片.脚本加载 4.定时任务 setTimeout.setInterv ...

  7. 使用rclone将linux服务器上的文件夹同步到nextcloud

    最近公司在用nextcloud管理文件,我写了一个python脚本,领导想看中间生成的图片,让我把图片同步到nextcloud上.上网搜了一些方法,最终用rclone实现,以下是实现过程. 服务器版本 ...

  8. 如何通过ETLCloud做企业级数据集成

    在数字化转型的浪潮中,数据已成为企业最宝贵的资产之一.企业级数据整合不仅能够提高数据的可用性和一致性,还能为企业决策提供强有力的支持. 一.什么是数据集成 数据集成是指将多个数据源中的数据进行整合.清 ...

  9. webstorm激活码2

    A0W7XBZNUZ-eyJsaWNlbnNlSWQiOiJBMFc3WEJaTlVaIiwibGljZW5zZWVOYW1lIjoi5rC45LmF5r+A5rS7IGlkZWEubWVkZW1pb ...

  10. GROOVY 列表

    列表的基本操作: import java.io.File class Example { static void main(String[] args){ def list1 = [1,2]; def ...