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

C语言基础

  • 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
必须在定义时初始化(否则无意义)
典型用途 存储临时数据、用户输入、状态变化等(如计数器、中间结果)
  • 类型转换
    类型转换是将一种数据类型的值转换为另一种数据类型的过程,主要用于不同类型数据之间的运算或赋值。
    • 隐式类型转换
      隐式类型转换由编译器自动完成,无需程序员干预,遵循 "低精度向高精度转换" 的原则(避免数据丢失)
    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码为65int 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);   // 输出:165printf("i + f = %lf\n", result2);  // 输出:103.140000printf("f -> int = %d\n", result3); // 输出:3printf("d -> float = %f\n", result4); // 输出:2.718000return 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); // 先计算再转换,结果为78printf("(int)3.14159 = %d\n", num1);       // 输出:3printf("(float)2.71828 = %f\n", num2);     // 输出:2.718280printf("(char)100 = %c\n", ch);            // 输出:dprintf("(float)10/3 = %f\n", average);     // 输出:3.333333printf("(int)(3.14*5*5) = %d\n", area);    // 输出:78return 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)
http://www.wxhsa.cn/company.asp?id=6863

相关文章:

  • 公益站Agent Router注册送200刀额度竟然是真的
  • 数据集中valid的作用
  • 深入 RocketMQ 核心源码:从环境搭建到高可用设计的全方位解析
  • 单例模式
  • apache修改默认位置
  • 实用指南:YOLOv11的旋转目标检测改进-(扩展检测头支持旋转框预测,适配遥感场景)
  • 从零到顶会:NLP科研实战手册 - 实践
  • 肝不好能喝酒吗
  • ROS中如何将日志格式设置为行号的形式
  • USB相关的sysfs文件(重要的)【转】
  • 25上第一周
  • 深入解析:RxJava在Android中的应用
  • 模型选择与配置说明
  • 梯度下降算法
  • 002_文本分类任务的问答
  • 车牌识别
  • 告别人工标注瓶颈!Reward-RAG:用 CriticGPT 打造更懂人类偏好的检索模型
  • Latex 中百分号怎么打
  • 文件上传-条件竞争绕过
  • 文件包含漏洞
  • 9.17 CSP-S模拟23/多校A层冲刺NOIP2024模拟赛19 改题记录
  • Java基本语法
  • 在AI技术快速实现创想的时代,挖掘前端学习新需求成为关键——某知名编程教育平台需求洞察
  • 负载均衡层详解part3-lvs
  • 4. MySQL 索引优化实战
  • 算法课第一周作业
  • 线段树懒标记模板
  • 谁在我这位置遗留或丢失了一颗口罩爆珠(好像是桃子味)?
  • python小计划——学生管理系统
  • C++ 并发