C语言本质笔记

嵌入式 C 语言入门:函数指针基础笔记 —— 从计算器优化到指针本质 本文通过计算器示例详细讲解了C语言函数指针的用法和优化技巧。首先展示了传统switch-case实现计算器的代码冗余问题,进而引入函数指针解决方案,通过将函数地址赋值给指针变量实现动态调用。文章深入剖析了函数即地址的本质特性,并演示了三种获取函数地址的方法。最后介绍了用typedef简化函数指针类型定义的方法,使代码更简洁易读。函数指针作为嵌入式开发中的重要特性,能够有效提升代码灵活性,为后续学习回调函数等高级应用奠定基础。 阅读详情

C语言本质

1.ARM架构与汇编简明教程

  • 硬件结构在这里插入图片描述
    注:写一个程序,通过Keil或编译器烧写到Flash,转变成三条汇编指令(机器码),上电CPU取指令。
  • ARM汇编指令在这里插入图片描述

2.变量是什么

  • 变量变量,能变,就能读能写,必定在内存里,必定有一个地址,一个字节对应一个地址

  • 全局变量、局部静态变量:如何分配空间、如何赋初始值[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述
    需要自己写代码,从flash把初始值复制到内存中的地址当中。地址怎么来的?自己分配的,由链接器的参数决定地址(test.bin),按照基地址,根据变量在程序中的位置,确定全局变量在内存中的地址(由下往上)。为了线程(每个线程都有自己的栈)安全,尽量不用全局变量。DATA段的内存大小由有初值的全局/静态变量决定,存的是非零的全局变量的初始值;ZI段由无初值或初值为0的全局/静态变量决定。

  • 局部变量:如何分配空间,如何赋初始值
    在栈中,按照字节(变量类型)大小,从栈顶(高)开始往下(低)分配(满减),通过机器语言分配,先调整,再满减,SP-4。
    栈PUSH在这里插入图片描述
    栈POP(比方调用函数,函数中的局部变量用完之后空间就被释放)在这里插入图片描述

3.栈和堆

  • 在这里插入图片描述
    堆:就是一块空闲内存,可以使用malloc/free函数来管理它。
    栈:开始也是空闲的,除了基地址,控制不了它的运行,完全由机器操作。
char *str;
str = malloc(100);
strcpy(str,"sadjasdjs");

free(str);

4.函数是什么

  • 就是一系列的指令:一系列机器码在这里插入图片描述
  • 调用函数:让CPU的PC寄存器等于“一系列机器码”的首地址,就是函数地址
  • 怎么传递参数
    • 子函数无法修改实参?
      传递实参,相当于传递实参的副本,即只是把实参的数值拿出来,把数值赋给一个寄存器,然后函数会去使用一个寄存器,修修改改都跟实参无关。
    • 怎么让子函数修改调用者的变量?
      传递地址。

5.指针

  • 指针变量,也是一个变量,存放的是“首地址”
  • 使用指针的本质:使用地址访问变量
  • 函数指针的本质
STM32 SAI接口TDM模式实战:8通道音频采集系统搭建全流程(附DMA配置代码) 本文详细介绍了基于STM32 SAI接口TDM模式搭建8通道音频采集系统的全流程。内容涵盖硬件连接设计、CubeMX时钟树与SAI外设的详细配置,并重点解析了TDM模式的核心代码实现与DMA双缓冲机制,提供了完整的配置代码和常见时序问题排查指南,助力开发者高效实现多通道音频传输与处理。 阅读详情

相关推荐

STGCN实战:从零构建PyTorch时空图卷积网络预测城市交通流

本文详细介绍了如何使用PyTorch从零构建时空图卷积网络(STGCN)进行城市交通流预测。通过将交通网络建模为图结构,并融合时间卷积与空间图卷积,STGCN能有效捕捉交通流的时空依赖性。文章提供了从数据预处理、核心模块(TimeBlock与STGCNBlock)搭建、模型训练到实战技巧的完整指南,帮助开发者快速掌握这一前沿的交通速度预测技术。

wasm7browser的博客 249

【C语言极简自学笔记】从C语言函数实例深入了解函数本质

通过创建函数来实现输出素数、判断闰年以及有序数组的二分查找,进一步了解C语言函数的本质

LQYYDSY的博客 763

ADS1299寄存器配置与应用实战指南

本文提供了ADS1299高精度生物电信号采集芯片的寄存器配置与应用实战指南。详细解析了采样率、增益、转换模式等核心寄存器的设置方法,并分享了数据读取、高级功能配置及常见问题的调试心得,帮助开发者快速掌握ADS1299的配置技巧,实现稳定的ECG/EEG信号采集。

weixin_28278377的博客 194

C语言学习笔记——1(C语言本质,开始程序,进制,原码,反码,补码,变量)

本文系统阐述了C语言底层原理与计算机体系结构的关系。首先从ARM架构出发,解析了程序从硬盘加载到内存执行的全过程,以及CPU执行指令的底层操作(读取、计算、写入)。接着深入探讨了C语言本质是对内存的读写操作,并通过示例程序说明基本语法和输出格式控制。然后详细介绍了二进制、八进制、十进制和十六进制的表示方法及相互转换规则,包括数码、基数、位权等概念。最后讲解了数据存储单位、原码/反码/补码表示方法,以及变量的内存地址、命名规则、存储类型和作用域等核心概念,揭示了变量作为连接软件与硬件的桥梁作用。全文贯穿了从高

2301_81636338的博客 719

华为OD机试_2025 B卷_模拟消息队列(Python,100分)(附详细解题思路)

时间排序:确保事件处理顺序正确消费者管理:集合操作高效维护状态优先级实现:利用消费者ID自然排序边界处理:正确处理空消费者情况。

测试工程师的成长之路 1120

Windows系统3D Gaussian Splatting环境搭建全攻略:从零开始到成功运行

本文详细介绍了在Windows系统上搭建3D Gaussian Splatting环境的完整流程,包括CUDA 12.6安装、Anaconda环境配置、代码获取与依赖安装等关键步骤。针对Windows平台特有的环境配置问题,提供了实用的解决方案和常见错误排查方法,帮助开发者快速实现3D Gaussian Splatting的成功运行。

weixin_30832143的博客 454

ARM架构与C语言(韦东山)学习笔记(1)-C语言的本质

学习B站韦东山的ARM架构与C语言的学习笔记。

qq_53092944的博客 2283

第十五届蓝桥杯省赛C/C++B组H题【拔河】题解(AC)

由于枚举三个点肯定会超时,所以只能枚举两个点,我们尝试枚举第一个区间。的复杂度,需要找出右区间中和左区间的和最相近的值,可以考虑使用。一开始,我们将所有可能的右区间的区间和,都插入。做法同上,用前缀和优化数组求和的过程。的数组和差值最小是多少,其中。递增进行枚举左区间,当。的数组,求两个子数组。为左端点的区间的和。

一只大采集~ 5283

C语言学习笔记16——数组的本质

数组的概念 在C语言中: 数组是相同类型的变量的有序集合 数组大小 数组在一片连续的内存空间中存储元素 数组元素的个数可以显示或隐式指定 例: int a[5] = {1, 2}; int b[] = {1, 2}; 问题: 1. a[2], a[3], a[4] 的值是多少? 2. b包含了多少元素 /* 测试代码 */ #include <stdio...

DSH2418C的博客 424

【python爬虫--爬取电商商品及对其销量、好差评等数据进行分析】Python爬虫爬取电商商品及大数据分析-实战

选择目标电商网站:这里选择爬取两个不同电商网站(比如京东、淘宝)上的商品数据,包括商品名称、价格、销量和评价信息。编写爬虫:通过爬虫获取商品信息并保存数据。数据清洗与对齐:将两个电商网站抓取到的数据进行统一清洗和对齐。数据分析:进行销量分析、好评与差评分析等。

Dreams°的博客 4013

深入解读WT软件湍流强度计算与分析

深入解读WT软件湍流强度计算与分析

weixin_46713695的博客 1021

01.芯片架构与c语言本质

介绍用嵌入式单片机的芯片架构,c语言的本质

zero654123的博客 514

超大规模系统(千万级用户)中实现字段级权限控制

摘要:本文提出了一套分布式架构下的字段级权限优化方案,结合RBAC+ABAC混合模型与技术手段实现性能与安全的平衡。方案包括:1)权限模型优化,采用RBAC预计算基础权限与ABAC动态校验敏感字段;2)数据层优化,实现动态字段过滤与加密存储;3)多级缓存策略与预计算机制提升性能;4)分布式架构设计,通过网关校验和策略引擎集群保证扩展性。最终在千万级用户系统中实现99.9%可用性,权限校验延迟控制在50ms以内。

从技术实践立足,从项目管理方法论延伸思考 1348

学习笔记-有关C语言的指针的类型和本质

一个变量var和其指针p *p和var指的是var的内容,p和&var指的是var的地址 指针究竟是什么? int i = 123;  int是类型(整数类型),i是该类型的变量,123是赋予i的值(一个整数)。 i所占的空间大小是平台相关的,一般编译环境中sizeof(i)=4。 int* p = &i; int*是类型(指向整数的指针类型),p是该类型的变量,&i

ligenmt的专栏 484

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C语言学习笔记【02】——指针及其本质(一)

前言 内容我会由易到难慢慢过渡 “指针是一种数据类型,它是C语言的重要内容之一。掌握指针型数据的使用,是深入理解C语言特性和掌握C语言编程技巧的重要环节,正确而灵活地使用指针,可以有效地描述各种复杂的数据结构,能够动态地分布内存空间,能够方便地操作字符串,还可以自由地在函数之间传递各种类型的数据,使程序简介、紧凑,执行效率高。” ——摘自《C语言程序设计教程(第三版)》(李风霞) 初步了解 指针是C语言必学内容之一,也是C语言的独特之处。你对C语言的熟练程度也取决于你对指针的理解。我们先运行以下例

qq_64233601的博客 537

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【C 语言极简自学笔记】深入解析C 语言关键字typedef、static 及#define定义常量和宏的本质

在 C 语言的学习中,typedef、#define和static是三个重要且容易混淆的关键字,主要通过具体案例深入剖析它们的底层逻辑和使用场景,帮助建立清晰的认知体系。

LQYYDSY的博客 762

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C语言学习笔记15——指针的本质分析

指针的分析1:* 号的意义 在C语言中: 在指针声明时, * 号表示所声明的变量为指针 在指针使用时, * 号表示取指针所指向的内存空间中的值 int i = 0; int j = 0; // 指针声明 int* p = &i; // 取值 (* 号类似一把钥匙, 通过这把钥匙可以打开内存, 读取内存中的值) j = *p; 指针的分析2:传值调用和传址调用 指...

DSH2418C的博客 439

C语言学习笔记【02】——指针及其本质(二)

指针操作数组 指针操作一维数组 在介绍之前,我们先了解一下关于数组名的知识。 数组名 代表这段内存首地址 回忆一下指针的定义,这数组名不就是指针吗,我们试着操作一下 int array[3]={1,2,3}; for(int i=0;i<3;i++) { printf("%d\t%d\n",array[i],*(array+i)); printf("%p\t%p\n",&array[i],&*(array+i)); } 可.

qq_64233601的博客 1066

百问网C语言课程学习笔记

01 芯片架构与C语言本质。

pokerxkk的博客 117

个人学习笔记 c语言的本质韦东山-10函数

f=(int (*) (int v))0x20008001 //指针指向首地址 //bit0=1,CPU才知道thumb指令集。//0x0800,000C变0x0800,000D(最低bit=1表示Thumb指令不表示地址)怎么让子函数修改调用者的变量:a=add_val(&a);F103(只支持thumb指令集)取函数地址的时候,bit0不表示地址,表示他是一个thumb指令。栈(很深的调用关系,进出函数创建的局部边量会出栈,找调用最复杂的调用关系)(该指针的类型)int *

2301_81831368的博客 644

C语言笔记 第二十六课 指针的本质分析

第二十六课 指针的本质分析 变量回顾 程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间? 下面的程序输出什么?为什么? *号的意义 在指针声明时,*号表示所声明的变量为指针 在指针使用时,*号表示取指针所指向的内存空间中的值 小贴士 26-1 指针的使用示例 32位系统的Ubuntu,存储的指针变量都是四位字节 64位系统也是四位字节吗?八位 传值调用与传址...

YLC_慕类的博客 227

个人学习笔记 c语言的本质韦东山-14联合体-15位域

(我设置的栈 __Vectors DCD 0x20000000+0x3000)眼里,一个地址对应一个byte,8bit(int a;四个字节,四个地址)sp+0的位置bit0是sex;bit1是old,前30bit空。位域的操作效率低:先读出数据,修改之后再写进去。直接操作不是位域的变量:直接写就行了。sex在bit0,old在bit1。abc.old=0;abc.age=1;abc.old=1;pc的值指向下一个地址。下面这个是2byte。

2301_81831368的博客 401

回看经典!第一章 从“Hello World”到理解编译本质(2015年C语言培训班笔记重读)

本文摘要介绍了C语言基础知识和编程环境搭建。主要内容包括:1)C语言32个关键字的简要说明;2)在Windows环境下配置GCC编译器并编写第一个C程序;3)C程序基本结构、语法规则和常用函数(如printf、system)的使用;4)GCC编译过程详解(预编译、汇编、编译、链接);5)简要对比32位和64位操作系统的内存管理差异;6)使用Visual Studio创建MFC图形界面程序的步骤;7)CPU架构基础知识(RISC与CISC)。文章以实用操作为主,适合C语言初学者快速入门。

深耕计算机专业知识与技术。 1036

C语言学习笔记 - 30.数据类型 - ASCII码与字符的存储本质

本文介绍了C语言中字符型数据的核心概念。主要内容包括:1)字符变量可通过%c和%d分别输出字符形式及其ASCII码值;2)ASCII码作为字符编码标准,定义了字符与整数的对应关系;3)必须掌握'A'=65、'a'=97、'0'=48等关键ASCII码值;4)字符在计算机中以二进制整数形式存储;5)除ASCII外,还存在GB2312、UTF-8等其他编码标准。这些知识是理解C语言字符处理机制的基础。

weixin_57913829的博客 278

C/C++ 知识复习笔记

C/C++ 核心知识摘要

m0_63816268的博客 1955

10.【C语言学习笔记】指针(二)(数组名理解、指针访问数组、数组传参的本质、typedef、数组指针、函数指针)

C语言 1.数组名的理解(数组首元素的地址,sizeof(arr)和&arr代表整个数组);2.使用指针访问数组;3.一维数组传参的本质(传递数组首元素的地址);4.二级指针变量(指针的指针);5.指针数组(是数组);6.数组指针(指向数组的指针);7.二维数组传参的本质(传递第一行这个一维数组的地址);8.字符指针变量(常量字符串不能修改);9.函数指针变量(存放函数的地址)、typedef关键字的使用;10.函数指针数组—转移表的使用。

恢弘志士之气,不宜妄自菲薄 847
上一篇: Linux基础学习笔记
下一篇: Linux应用开发基础知识笔记
彦祖学嵌入
博客等级 码龄4年 91粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值