C语言基础与进阶学习指南(附运行效果图及术语解析)
C语言基础与进阶学习指南(附运行效果图及术语解析)
目录
- C语言标准与编译流程
- CPU与内存基础
- C语言基础语法
- 数据类型详解
- 变量与内存管理
- 运算符与表达式
- 输入输出函数
- 函数与内存管理
- 指针与内存操作
- 结构体与高级应用
1. C语言标准与编译流程
1.1 C语言标准演进
- K&R C(1978):最初由 Dennis Ritchie 和 Brian Kernighan 开发,无标准,依赖文档。
- ANSI C / C89(1989):首个国际标准,定义了函数原型、
void类型等。 - C99(1999):支持
for循环内声明变量、long long类型等。 - C11/C17:新增多线程支持、原子操作等。
示例代码(C99特性)
#include <stdio.h>int main() {for (int i = 0; i < 5; i++) { // C99允许在for循环中声明变量printf("%d\n", i);}return 0;
}
运行效果:
0
1
2
3
4
2. CPU与内存基础
2.1 CPU架构与内存层次
- 寄存器:CPU内部高速存储单元,直接参与运算(如
EAX寄存器)。 - 缓存(Cache):介于CPU与内存之间的高速缓存,分L1/L2/L3三级。
- 内存(RAM):程序运行时的数据存储区域。
- 外存(硬盘/SSD):持久化存储。
CPU访问速度:寄存器>缓存>内存>外存
3. C语言基础语法
3.1 程序结构与注释
#include <stdio.h> // 系统头文件用尖括号包含int main() { // 程序入口printf("Hello World\n"); // 输出语句return 0; // 返回状态码
}
运行效果:
Hello World
关键术语:
#include:预处理指令,包含头文件。main():程序入口函数,必须存在且唯一。return 0:表示程序成功退出。
4. 数据类型详解
4.1 基本数据类型
| 类型 | 大小(字节) | 取值范围 |
|---|---|---|
char | 1 | -128 ~ 127 |
unsigned int | 4 | 0 ~ 4,294,967,295 |
float | 4 | 7位有效数字 |
示例代码(类型转换)
#include <stdio.h>int main() {char a = -1; // 二进制:11111111unsigned char b = a; // 转为无符号后值为255printf("%d\n", b); // 输出255return 0;
}
运行效果:
255
5. 变量与内存管理
5.1 变量声明与作用域
int global_var = 10; // 全局变量void func() {static int static_var = 5; // 静态局部变量int local_var = 20; // 自动局部变量
}
关键术语:
- 全局变量:作用域覆盖整个程序。
- 静态变量:生命周期与程序相同,但作用域仅限于定义的函数/文件。
- 自动变量:函数内声明,栈内存分配,函数调用结束释放。
6. 运算符与表达式
6.1 类型转换与运算
#include <stdio.h>int main() {signed char a = 127; // 二进制:01111111signed char b = a + 1; // 内部自动提升为int运算printf("%d\n", b); // 输出-128(溢出)return 0;
}
运行效果:
-128
关键术语:
- 隐式类型提升:
char在运算中自动转为int。 - 溢出:超出数据类型最大值时,结果取模。
7. 输入输出函数
7.1 格式化输出
#include <stdio.h>int main() {double d = 123.456;printf("AAA%10.2fBBB\n", d); // 总宽10,小数2位printf("AAA%-10.2fBBB\n", d); // 左对齐return 0;
}
运行效果:
AAA 123.46BBB
AAA123.46 BBB
格式说明符:
%10.2f:总宽度10,小数部分保留2位。%符号后加-表示左对齐。
8. 函数与内存管理
8.1 函数返回值与内存
#include <stdio.h>
#include <stdlib.h>void func() {exit(0); // 程序终止,不再执行后续代码printf("This will not print\n");
}int main() {func();printf("Hello\n"); // 不会执行return 0;
}
运行效果:
无输出(程序在exit(0)终止)。
关键术语:
exit():立即终止程序,不执行后续代码。return:仅退出当前函数,不影响程序整体。
9. 指针与内存操作
9.1 指针基础
#include <stdio.h>int main() {int a = 10;int *p = &a; // 指向a的地址printf("Value: %d, Address: %p\n", *p, p); // 输出值与地址return 0;
}
运行效果:
Value: 10, Address: 0x7ffee3c6a9d4
关键术语:
- 指针:存储变量地址的变量。
&:取地址运算符。*:解引用运算符。
10. 结构体与高级应用
10.1 结构体定义
#include <stdio.h>struct Person {char name[20];int age;
};int main() {struct Person p = {"Alice", 30};printf("Name: %s, Age: %d\n", p.name, p.age);return 0;
}
运行效果:
Name: Alice, Age: 30
关键术语:
- 结构体(struct):自定义数据类型,组合多个成员。
- 成员访问:通过
.运算符访问结构体成员。
总结与进阶建议
- 掌握内存模型:理解变量存储位置(栈/堆/全局区)。
- 熟悉标准库:如
<stdio.h>、<stdlib.h>的函数用法。 - 实践调试:使用
printf或GDB观察程序运行状态。
通过本文的系统学习,读者可逐步掌握C语言核心概念,为后续嵌入式开发、系统编程打下基础!
相关文章:
C语言基础与进阶学习指南(附运行效果图及术语解析)
C语言基础与进阶学习指南(附运行效果图及术语解析) 目录 C语言标准与编译流程CPU与内存基础C语言基础语法数据类型详解变量与内存管理运算符与表达式输入输出函数函数与内存管理指针与内存操作结构体与高级应用 1. C语言标准与编译流程 1.1 C语言标准演…...
2025年3月GESP八级真题解析
第一题——上学 题目描述 C 城可以视为由 n n n 个结点与 m m m 条边组成的无向图。这些结点依次以 1 , 2 , … , n 1,2,…,n 1,2,…,n 标号,边依次以 1 , 2 , … , m 1,2,…,m 1,2,…,m 标号。第 i i i 条边( 1 ≤ i ≤ m 1≤i≤m 1≤i≤m&#…...
C++继承机制:从基础到避坑详细解说
目录 1.继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.1定义格式 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 总结: 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 编辑 默认构造与传参构造 拷贝构造&am…...
NVMe(Non-Volatile Memory Express)详解
一、NVMe的定义与核心特性 NVMe(非易失性内存主机控制器接口规范)是一种 基于PCIe总线的高性能存储协议,专为固态硬盘(SSD)设计,旨在替代传统的AHCI协议(如SATA)。其核心特性包括&a…...
MySQL数据库精研之旅第二期:库操作的深度探索
专栏:MySQL数据库成长记 个人主页:手握风云 目录 一、查看数据库 二、创建数据库 2.1. 语法 2.2. 示例 三、字符集编码和校验(排序)规则 3.1. 查看数据库支持的字符集编码 3.2. 查看数据库支持的排序规则 3.3. 不同的字串集与排序规则对数据库的…...
git_version_control_proper_practice
git_version_control_proper_practice version control,版本控制的方法之一就是打tag 因为多人协作的项目团队,commit很多,所以需要给重要的commit打tag,方便checkout,检出这个tag 参考行业的实践方式。如图git、linux…...
从单任务到多任务:进程与线程如何实现并发?
文章目录 1. 什么是进程定义进程的构成进程的状态进程与线程的关系进程的创建与销毁进程调度进程间通信(IPC)总结 2. 什么是线程?定义线程与进程的关系线程的特点线程的优点线程的类型线程的创建与销毁线程间通信总结 3. 进程与线程有什么区别…...
计算机组成原理和计算机网络常见单位分类及换算
计算机组成原理(主要用于存储、内存、缓存等) 计算机网络(主要用于传输速率) 直观对比...
【第二十八周】:Temporal Segment Networks:用于视频动作识别的时间分段网络
TSN 摘要Abstract文章信息引言方法时间分段采样分段聚合输入模态聚合函数多尺度时序窗口集成(M-TWI)训练 代码实现实验结果总结 摘要 本篇博客介绍了时间分段网络(Temporal Segment Network, TSN),这是一种针对视频动…...
为WordPress自定义一个留言板
要在WordPress中创建一个留言反馈表单,并实现后台管理功能,您可以按照以下步骤进行操作: 1. 创建留言反馈表单 首先,您需要使用一个表单插件来创建表单。推荐使用 Contact Form 7 或 WPForms。以下是使用 Contact Form 7 的示例…...
扩展域并查集
什么叫扩展域并查集 1 和 2是敌人,那么就把1好12链接起来:表示1和2是敌人 2和11链接起来也是这个道理 然后2 和3使敌人同理。 最后12连接了1 和 3,表名1 和 3 是 2 的敌人,1和3 就是朋友 1.P1892 [BalticOI 2003] 团伙 - 洛谷 #in…...
【C#语言】C#同步与异步编程深度解析:让程序学会“一心多用“
文章目录 ⭐前言⭐一、同步编程:单线程的线性世界🌟1、寻找合适的对象✨1) 🌟7、设计应支持变化 ⭐二、异步编程:多任务的协奏曲⭐三、async/await工作原理揭秘⭐四、最佳实践与性能陷阱⭐五、异步编程适用场景⭐六、性能对比实测…...
动态规划入门详解
动态规划(Dynamic Programming,简称DP)是一种算法思想,它将问题分解为更小的子问题,然后将子问题的解存起来,避免重复计算。 所以动态规划中每一个状态都是由上一个状态推导出来的,这一点就区别…...
SOFABoot-09-模块隔离
前言 大家好,我是老马。 sofastack 其实出来很久了,第一次应该是在 2022 年左右开始关注,但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概览 SOFABoot-01-蚂蚁金服开源的 s…...
电池电量检测方法介绍,开路电压法、库仑积分法、内阻法
开路电压法、库仑积分法、内阻法、卡尔曼滤波法、混合法 开路电压法是目前最简单的方法,根据电池的特性得知,在电池容量与开路电压之间存在一定的函数关系,当得知开路电压时,可以初步估算电池的剩余电量。该方法精度不高…...
基于基于eFish-SBC-RK3576工控板的智慧城市边缘网关
此方案充分挖掘eFish-SBC-RK3576的硬件潜力,可快速复制到智慧园区、交通枢纽等场景。 方案亮点 接口高密度:单板集成5GWiFi多路工业接口,减少扩展复杂度。AIoT融合:边缘端完成传感器数据聚合与AI推理,降低云端…...
CSS基础知识一览
持续维护 选择器 display 常用属性 浮动 弹性布局...
《Keras 3 : AI神经网络开发人员指南》
《Keras 3 : AI神经网络开发人员指南》 开发人员指南 我们的开发人员指南深入探讨了特定主题,例如层子类化、微调或模型保存。 它们是成为 Keras 专家的最佳方式之一。 我们的大多数指南都是以 Jupyter 笔记本的形式编写的,可以在 Google Colab 中一键…...
【免费】2000-2019年各省地方财政房产税数据
2000-2019年各省地方财政房产税数据 1、时间:2000-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、地方财政房产税 4、范围:31省 5、指标说明:房产税是对个人和单位拥有的房产征收的一种…...
WPF 布局舍入(WPF 边框模糊 或 像素错位 的问题)
1. 什么是 WPF 布局舍入? 在 WPF 开发过程中,可能会遇到界面模糊、边框错位、文本渲染不清晰等问题。这些现象通常是由于 WPF 采用 设备无关像素(DIP, Device Independent Pixels),在不同 DPI 设置下,UI 元…...
车载以太网网络测试-21【传输层-DOIP协议-4】
目录 1 摘要2 DoIP entity status request/response(0x4001、0x4002)2.1 使用场景2.2 报文结构2.2.1 0x4001:DoIP entity status request2.2.2 0x4002:DoIP entity status response 3 Diagnostic power mode information request/…...
机器学习——KNN数据集划分
一、主要函数 sklearn.datasets.my_train_test_split() 该函数为Scikit-learn 中用于将数据集划分为训练集和测试集的函数,适用于机器学习模型的训练和验证。以下是详细解释: 1、函数签名 train_test_split(*arrays, # 输入的数据…...
Pytest基础使用
概述 Pytest是Python里的一个强大的测试框架,灵活易用,可以进行功能,自动化测试使用,可以与Requests,Selenium等进行结合使用,同时可以生成Html的报告。 一、Pytest的基本使用 在未指定Pytest的配置文件时,会对以下文件进行执行: test_*.py,如:test_1.py*_test.py…...
Grid 布局实现三栏布局
使用 CSS Grid 布局实现三栏布局(左右固定 100px,中间自适应)的核心原理是通过网格模板精确控制列宽分配。以下是具体实现方法及优化技巧: 一、基础实现 父容器设置 为外层容器添加 display: grid 使其成为网格容器,并通过 grid-template-columns 定义列宽 css .contain…...
一条sql语句在mysql中的执行流程(Mysql基础架构)
mysql基础架构 MySQL 主要分为 Server 层和 存储引擎层: Server 层:主要包括 连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一…...
Spring AI Alibaba ChatModel使用
一、对话模型(Chat Model)简介 1、对话模型(Chat Model) 对话模型(Chat Model)接收一系列消息(Message)作为输入,与模型 LLM 服务进行交互,并接收返回的聊天…...
基于FPGA频率、幅度、相位可调的任意函数发生器(DDS)实现
基于FPGA实现频率、幅度、相位可调的DDS 1 摘要 直接数字合成器( DDS ) 是一种通过生成数字形式的时变信号并进行数模转换来产生模拟波形(通常为正弦波)的方法,它通过数字方式直接合成信号,而不是通过模拟信号生成技术。DDS主要被应用于信号生成、通信系统中的本振、函…...
k8s高可用集群安装
一、安装负载均衡器 k8s负载均衡器 官方指南 1、准备三台机器 节点名称IPmaster-1192.168.1.11master-2192.168.1.12master-3192.168.1.13 2、在这三台机器分别安装haproxy和keepalived作为负载均衡器 # 安装haproxy sudo dnf install haproxy -y# 安装Keepalived sudo yum …...
WPF Reactive 数据绑定
文章目录 Combox 绑定List-通过枚举绑定方法一:方法二:Button 绑定TextBlock绑定NumericUpDown绑定Expander绑定checkbox绑定NumericUpDownCombox 绑定List-通过枚举绑定 方法一: ViewControl using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; usin…...
WSL 环境桥接与雷达通信配置笔记
作者: DWDROME 维护时间: 2025-03-22 参考文章:Windows子系统(WSL)通过桥接网络实现被外部局域网主机直接访问 WSL 环境桥接与雷达通信配置笔记 环境说明 Windows 11 专业版(启用 Hyper-V)WSL2 Ubuntu 20.04物理网线(…...
