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

【C语言学习笔记】(1)

一,c语言总览。

1,c语言被选择的原因

c语言在嵌入式中为主要的高级汇编语言,可直接驱动大多·数的多核心开发板。

嵌入式可以嵌入多种电子设备,帮助设备进行多种策略与行为。

由于嵌入式设备可能没有系统环境只能运行二进制机器语言,大部分需要虚拟机或解释性语言不可用,c是无系统环境嵌入式芯片普片选择。

2,c语言相关要点

环境:编辑器,编译器与编译流程,调试器,ide,(Linux相关)。

语法:数据类型与常变量,格式符(转义符)与运算符(逻辑符),数组与指针,函数与结构体(枚举体,联合体)。

关键字和常用标准函数:判断关键字,循环关键字,特殊关键字,输入输出函数,内存管理函数,数学函数。

二,环境

1.0 编辑器:

用于编辑代码的工具

2.0 编译器:

编译工具链(gcc),

2.1GCC:

广泛多平台,开源,强高,标准致性,集成工具链

2.2 流程及GCC参数:

hello.c(gcc -E)hello.i(-S).s(-C).o/.obj(gcc).exe/.out

  • 指定输出文件名:使用-o参数。

    • gcc main.c -o myprogram(不指定则默认为a.outa.exe)

  • 编译最小单位:翻译单元(Translation Unit),通常指.c源文件+其包含的头文件

预处理:展头文,删注释,替换宏,理条件

编译:c转汇编(查语法错误)

汇编:汇编转二进制(机器码)

链接:链接多个二进制文件打包为执行文件

2.3文件类型

  • .c:源文件(Source File),包含具体实现。
  • .h:头文件(Header File),包含声明、宏定义、结构体定义。

常见标准头文件:

输入输出(stdio.h);内存管理(stdlib.h);字符串(string.h);数学(math.h)

3.0 IDE:

包含编辑器,编译器,调试器,图形界面等集成环境

三,语法。

1. 0内存与数据表示 (Memory & Data)

1.1 存储单位

  • (bit):最小信息单位,01
  • 字节(Byte):最小寻址单位,1 Byte = 8 bits
  • 换算
    • 1 KB = 1024 B
    • 1 MB = 1024 KB
    • 1 GB = 1024 MB
    • 1 TB = 1024 GB

1.2 进制与转换

十进制:无 (如 10)

二进制:0b开头 (GCC 扩展)

八进制:0 开头 (如 012)

十六进制:0x 开头 (如 0xA5)

ps:1 位十六进制 = 4 位二进制 (地址常用)

  • 十转二:除2取余,逆序排列。
  • 二转十:按位权展开求和。

1.3 字节序 (Endianness)

  • 小端序(Little-Endian)低地址存低位数据(x86架构常用,主机字节序)
  • 大端序(Big-Endian)低地址存高位数据(网络传输常用,网络字节序)

1.4 负数的存储 (补码)

计算机内部统一使用补码进行运算。

  1. 原码:最高位为符号位(01),其余位表示数值。
  2. 反码
    • 正数:同原码。
    • 负数:符号位不变,数值位按位取反。
  3. 补码
    • 正数:同原码。
    • 负数:反码+ 1
  • 8位有符号数范围-128~127(1000 0000~0111 1111)
  • 8位无符号数范围0~255(0000 0000~1111 1111)

2.0变量

2.1变量的定义:

被命名并存储数据的内存地址,必须先定义或声明后使用;在定义时指定必要的名字类型与最好要有的初始值。

2.2声明:

(修饰关键字)存储类型+数据类型+名称=初始值(声明在函数外的为全局变量并全局生效,函数内的为局部变量)

2.3变量的修饰关键字:

auto默认只存活本块

const常量不可变

static静态活全程但作用受限(局部变量活全局但任函数可见,全局变量或函数仅本文件可见)

extern全局默认(外部不加,与static互斥)

register寄存(存寄存器里高频访问)

volatile易变(只能从内存读取,中断共享,多线共享,信号处理,底层延迟)

signed有符号;unsigne无符号;Short2字节整数

2.4变量类型

Char1字节字符 bool布尔(默认4字节整数)

int 4字节整数 Longlong8字节整数

Float4字节小数(默认格式科学计数) Double8字节小数

void空

四 格式符转义符与运算(符逻辑)

1.0格式符

%d(%i):有符十进;%u无符十进

%o八进;%x(X大写)16进制

%h短整;%ll长整

%f小数(%[宽度].[精度]f);%e科学格式;%g自动判断

%c字符(ascll);%s字符串;%p地址

2.0转义符

\n换行 \r回车 \t 制表 \b退格 \f换页

\a响铃 \v垂表 \\反斜 \'单引 \"双引 \?问号

\0空字

3.0运算符

3.1计算

+加 -减 *乘 /除 %取余(仅整数) =值传递

+=加完赋左 -= 减~~~ *= 乘~~~ /=除~~~

++自增 --自减(前置先加减后用,后反)

3.2逻辑

>大于 >=大于等于 <小于 <=小于等于 ==等于 !=不等于

&&与 ||或 !非(括弧提升优先级)

3.3位运算

&位与 |位或 ^位异或 ~取反 <<左移 >>右移

a?b:c判断a为真?真b假c

五 数组与指针

1.0数组

数组是一组相同数据类型的元素的集合,这些元素在内存中是连续存储的,并且通过一个唯一的数组名称和索引来访问。数组可以用来存储大量相同类型的数据,避免了定义多个变量的麻烦。(声明:数据类型+数组名[元素个数];访问:数组名[第几个元素])

int a[5];int b[5]={}; int c[]={1,2,3,4,5}; a[0]=0;

1.1字符数组

char a[5]; char a[5]={'a','b','c','d','e'}; char a[]="abcde";//可以不指定长度

ps:string.h 中strlen,strcpy,strcmp函数用于处理字符串;

1.2二维数组

int a[2][2]={{0,0}, {0,0}};

ps:二位数组在内存上与一维的一样是线性的

2.0指针(内存地址)

2.1内存地址

ps:stdlib.h存放malloc,free,rand,atoi函数用于管理内存

2.2指针的定义:

指针是一个变量,它存储另一个变量的内存地址。变量存储在内存中,每个变量占据一定的内存空间,并有唯一的地址。指针就是用来存储这些地址的变量。

2.3指针的声明,引用,运算:

int a=0; int *p=&a; int arr[5] = {1, 2, 3, 4, 5}; int *p = arr;// p指向arr[0] //指针加法 p++;// p指向arr[1],即&arr[1] int arr[5] = {1, 2, 3, 4, 5}; int *p1 = &arr[3];//指向arr[3] int *p2 = &arr[0];//指向arr[0] int diff = p1 -p2;// diff = 3,表示两个元素之间有3个int的距离 if(p1>p2){return 0;}//地址可以比较,高地址比低地址大

2.4二级指针:

指针的指针简单来说就是一个存储另一个指针地址的变量。假设我们有一个普通的指针,它指向某个变量的内存地址。一个指针的指针则指向这个指针的地址,从而形成一种多级引用关系。

int a=0; int *p=&a; int **pp=&p;

2.5常量指针与指针常量

const int *p;//const修饰*,指地址存的不变(指针常量) int * const q;//const修饰变量q,指指针存的地址不变(常量指针)

2.6指针数组与数组指针

int *a[5]={};//*修饰a[5],所以是数组指针(指向数组的指针);*(a[5]) int (*b)[]={};//*修饰的变量b,然后作为同类型变量纯数组里,即指针数组
http://www.jsqmd.com/news/497928/

相关文章:

  • 2026前端面试题和避坑指南
  • 风速仿真模型实现及代码详解
  • 吃透HTTP及相关协议核心区别,从基础到进阶全覆盖
  • 【AI】如何设计Agent的记忆系统?
  • 探索同城招聘系统源码:企业端+求职者端功能开发全流程详解
  • 阿里发布全球首个企业级Agent平台“悟空”,要把“龙虾”装进2000万企业组织里
  • python+Ai技术的学生课外活动管理系统的数据可视化大屏分析系统 _
  • Mixture of Experts(MoE)
  • 808nm在生物医疗科研中的使用方法
  • 英伟达发布Groq 3 LPX推理加速器,瞄准AI基础设施下一战场
  • 【架构】-----Service 层代码太长太乱?试试这套 “见名知意” 的命名规范!
  • 中小企业为什么要重视业财一体化
  • 国内炒黄金的人多不多?炒现货黄金有什么门槛?
  • HBase在大数据领域海量数据存储的解决方案
  • 收藏 | 从零开始学LangGraph,构建能思考的Agentic RAG系统,小白也能轻松上手!
  • 2026高纯度Omega3鱼油推荐榜:高纯度深海鱼油、高纯度鱼油、深海鱼油软胶囊、降血脂鱼油、高纯度omega3选择指南 - 优质品牌商家
  • 2026年了,居然还有免费的BIM软件!
  • Nginx解决前端跨域问题
  • 【JUC并发 | 第八篇】AQS的底层原理
  • 金仓数据库在MySQL迁移中的实践复盘:某汽车集团近百套系统两周平滑替换路径
  • mysql数据库常规操作2
  • 北航软件工程[I.2] 个人作业:软件案例分析
  • 共享内存与进程间通信(IPC):提升TDengine时序数据库内部数据流转效率
  • TCP vs UDP 怎么选(偏实战:别背概念,用场景做决策)
  • 3月面了十几家前端岗后,我才知道大佬这份飞书题库的含金量
  • 求你了,别用 YYYY-MM-dd!
  • comsol 锂枝晶模型 此模型为多枝晶定向形核,可以直接拿来用,不用自己建模,三种物理场:相...
  • 26年春季学期学习记录第8天
  • MySQL索引入门:B+树原理+创建优化,新手也能看懂慢查询优化
  • 汽车电子构架演进(二)AUTOSAR的组成和演进