C语言基础与进阶学习指南(附运行效果图及术语解析)

news2025/3/24 23:03:59

C语言基础与进阶学习指南(附运行效果图及术语解析)


目录

  1. C语言标准与编译流程
  2. CPU与内存基础
  3. C语言基础语法
  4. 数据类型详解
  5. 变量与内存管理
  6. 运算符与表达式
  7. 输入输出函数
  8. 函数与内存管理
  9. 指针与内存操作
  10. 结构体与高级应用

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 基本数据类型

类型大小(字节)取值范围
char1-128 ~ 127
unsigned int40 ~ 4,294,967,295
float47位有效数字
示例代码(类型转换)
#include <stdio.h>

int main() {
    char a = -1; // 二进制:11111111
    unsigned char b = a; // 转为无符号后值为255
    printf("%d\n", b); // 输出255
    return 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; // 二进制:01111111
    signed 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):自定义数据类型,组合多个成员。
  • 成员访问:通过.运算符访问结构体成员。

总结与进阶建议

  1. 掌握内存模型:理解变量存储位置(栈/堆/全局区)。
  2. 熟悉标准库:如<stdio.h><stdlib.h>的函数用法。
  3. 实践调试:使用printf或GDB观察程序运行状态。

通过本文的系统学习,读者可逐步掌握C语言核心概念,为后续嵌入式开发、系统编程打下基础!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2320316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++继承机制:从基础到避坑详细解说

目录 1.继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.1定义格式 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 总结&#xff1a; 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 ​编辑 默认构造与传参构造 拷贝构造&am…

MySQL数据库精研之旅第二期:库操作的深度探索

专栏&#xff1a;MySQL数据库成长记 个人主页&#xff1a;手握风云 目录 一、查看数据库 二、创建数据库 2.1. 语法 2.2. 示例 三、字符集编码和校验(排序)规则 3.1. 查看数据库支持的字符集编码 3.2. 查看数据库支持的排序规则 3.3. 不同的字串集与排序规则对数据库的…

git_version_control_proper_practice

git_version_control_proper_practice version control&#xff0c;版本控制的方法之一就是打tag 因为多人协作的项目团队&#xff0c;commit很多&#xff0c;所以需要给重要的commit打tag&#xff0c;方便checkout&#xff0c;检出这个tag 参考行业的实践方式。如图git、linux…

计算机组成原理和计算机网络常见单位分类及换算

计算机组成原理&#xff08;主要用于存储、内存、缓存等&#xff09; 计算机网络&#xff08;主要用于传输速率&#xff09; 直观对比

【第二十八周】:Temporal Segment Networks:用于视频动作识别的时间分段网络

TSN 摘要Abstract文章信息引言方法时间分段采样分段聚合输入模态聚合函数多尺度时序窗口集成&#xff08;M-TWI&#xff09;训练 代码实现实验结果总结 摘要 本篇博客介绍了时间分段网络&#xff08;Temporal Segment Network, TSN&#xff09;&#xff0c;这是一种针对视频动…

扩展域并查集

什么叫扩展域并查集 1 和 2是敌人&#xff0c;那么就把1好12链接起来&#xff1a;表示1和2是敌人 2和11链接起来也是这个道理 然后2 和3使敌人同理。 最后12连接了1 和 3&#xff0c;表名1 和 3 是 2 的敌人&#xff0c;1和3 就是朋友 1.P1892 [BalticOI 2003] 团伙 - 洛谷 #in…

【C#语言】C#同步与异步编程深度解析:让程序学会“一心多用“

文章目录 ⭐前言⭐一、同步编程&#xff1a;单线程的线性世界&#x1f31f;1、寻找合适的对象✨1) &#x1f31f;7、设计应支持变化 ⭐二、异步编程&#xff1a;多任务的协奏曲⭐三、async/await工作原理揭秘⭐四、最佳实践与性能陷阱⭐五、异步编程适用场景⭐六、性能对比实测…

动态规划入门详解

动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;是一种算法思想&#xff0c;它将问题分解为更小的子问题&#xff0c;然后将子问题的解存起来&#xff0c;避免重复计算。 所以动态规划中每一个状态都是由上一个状态推导出来的&#xff0c;这一点就区别…

SOFABoot-09-模块隔离

前言 大家好&#xff0c;我是老马。 sofastack 其实出来很久了&#xff0c;第一次应该是在 2022 年左右开始关注&#xff0c;但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概览 SOFABoot-01-蚂蚁金服开源的 s…

基于基于eFish-SBC-RK3576工控板的智慧城市边缘网关

此方案充分挖掘eFish-SBC-RK3576的硬件潜力&#xff0c;可快速复制到智慧园区、交通枢纽等场景。 方案亮点 ‌接口高密度‌&#xff1a;单板集成5GWiFi多路工业接口&#xff0c;减少扩展复杂度。‌AIoT融合‌&#xff1a;边缘端完成传感器数据聚合与AI推理&#xff0c;降低云端…

CSS基础知识一览

持续维护 选择器 display 常用属性 浮动 弹性布局

【免费】2000-2019年各省地方财政房产税数据

2000-2019年各省地方财政房产税数据 1、时间&#xff1a;2000-2019年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区、年份、地方财政房产税 4、范围&#xff1a;31省 5、指标说明&#xff1a;房产税是对个人和单位拥有的房产征收的一种…

车载以太网网络测试-21【传输层-DOIP协议-4】

目录 1 摘要2 DoIP entity status request/response&#xff08;0x4001、0x4002&#xff09;2.1 使用场景2.2 报文结构2.2.1 0x4001&#xff1a;DoIP entity status request2.2.2 0x4002&#xff1a;DoIP entity status response 3 Diagnostic power mode information request/…

Spring AI Alibaba ChatModel使用

一、对话模型&#xff08;Chat Model&#xff09;简介 1、对话模型&#xff08;Chat Model&#xff09; 对话模型&#xff08;Chat Model&#xff09;接收一系列消息&#xff08;Message&#xff09;作为输入&#xff0c;与模型 LLM 服务进行交互&#xff0c;并接收返回的聊天…

基于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 …

3DMAX曲线生成器插件CurveGenerator使用方法

1. 脚本功能简介 3DMAX曲线生成器插件CurveGenerator是一个用于 3ds Max 的样条线生成工具&#xff0c;用户可以通过简单的UI界面输入参数&#xff0c;快速生成多条样条线。每条样条线的高度值随机生成&#xff0c;且可以自定义以下参数&#xff1a; 顶点数量&#xff1a;每条…

六十天前端强化训练之第二十六天之Vue Router 动态路由参数大师级详解

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗&#xff0c;谢谢大佬&#xff01; 目录 一、知识讲解 1. Vue Router 核心概念 2. 动态路由参数原理 3. 参数传递方案对比 二、核心代码示例 1. 完整路由配置 2. 参数接收组件 3. 导航操作示例 三、实现效果示…

Model Context Protocol:下一代AI系统集成范式革命

在2023年全球AI工程化报告中,开发者面临的核心痛点排名前三的分别是:模型与业务系统集成复杂度(58%)、上下文管理碎片化(42%)、工具调用标准化缺失(37%)。传统API集成模式在对接大语言模型时暴露明显短板:RESTful接口无法承载动态上下文,GraphQL缺乏工具编排能力,gR…

Java多线程与高并发专题——Future 是什么?

引入 在上一篇Callable 和 Runnable 的不同&#xff1f;的最后&#xff0c;我们有提到和 Callable 配合的有一个 Future 类&#xff0c;通过 Future 可以了解任务执行情况&#xff0c;或者取消任务的执行&#xff0c;还可获取任务执行的结果&#xff0c;这些功能都是 Runnable…