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

嵌入式——C语言:指针①

一、指针特点

        1.让代码更加简洁高效

        2.提供直接访问内存的操作

        3.利用指针可以直接操作硬件

二、指针概念

(一)地址:为了区分内存中不同字节的编号(0到2^16-1)

(二)指针:指针就是地址,地址就是指针,指针地址多了指向的概念

(三)指针变量:存放指针(地址)的变量(64位操作系统中所有指针变量均为8个字节

三、指针相关运算符

        1.&:取地址运算符,获得变量在内存空间中的首地址

                1.1只有变量(左值(可以写在等号左边))才能&,常量和表达式不能进行&操作

                1.2&构成的表达式为:变量在内存空间中的首地址

                        int Num = 0;

                        &Num:得到Num在内存空间4字节空间中的首地址

                1.3&构成的表达式类型位:变量的类型升级后的类型

                        int Num;

                        &Num:int -> int *

        2.*:获得指针指向的空间,或者对应空间中的值

                2.1*运算符连接的内容必须为指针类似,不能是普通变量类型

                2.2如果直接使用*对应的表达式,表达式值为:该指针指向空间中的值

                        *&Num;        //获取&Num指向的空间中int类型的值

                2.3如果使用*对应的表达式其类型为:指针类型降级后的类型

                        int *p;

                        *p;//int * -> int

                2.4*对应的表达式作为左值表示,将等号右边的值放入指针指向的空间

四、指针变量的定义

                不能使用未初始化的指针

(一)存储类型 数据类型 *变量名

(二)野指针

        定义:未经初始化的指针或者指向已经被释放空间的指针

(三)空指针(NULL)

        定义:指向内存空间为0x0的指针称为空指针 

         内存地址0x0空间为只读空间,不能复制,NULL指针不能执行*p = value操作

五、指针特性

        变量的访问形式

(一)直接访问:通过变量的变量名访问变量空间

(二)间接访问:通过变量在内存中的地址访问变量空间

六、指针的算术运算

(一)算术运算符

        指针偏移的大小由指针指向的数据类型大小决定

        两个指针相减:两个地址间相减数然后除数据类型

(二)不同指针类型之间的区别

        1.*操作时处理方式不同

        2.算数运算

六、指针常见操作

        注意:指针有两个需要请注意的概念:指针变量的本身,指针指向的空间。

                1.对指针变量:p或者q修改,改变的是指针的指向

                2.对*p或者*q:改变的是指针指向的空间,但是它的指向是不变的

七、指针作为函数参数

(一)值传递

        1.实参将值传给形参,形参值改变

        2.函数体内部想使用函数体外部变量值的时候,使用值传递

(二)地址传递

        1.实参将地址传递给形参,形参是指向实参的指针,可以利用形参修改实参的值

        2.函数体内部想修改函数体外部变量的值的时候,使用地址传递

八、练习

http://www.lryc.cn/news/599649.html

相关文章:

  • Web攻防-业务逻辑篇密码找回重定向目标响应包检验流程跳过回显泄露验证枚举
  • Go 官方 Elasticsearch 客户端 v9 快速上手与进阶实践*
  • 深度学习day02--神经网络(前三节)
  • 安装本地python文件到site-packages
  • STM32基础知识学习笔记:ICODE、DCODE、DMA等常见名词的解释
  • 【C++详解】模板进阶 非类型模板参数,函数模板特化,类模板全特化、偏特化,模板分离编译
  • 在 .NET 中使用 Base64 时容易踩的坑总结
  • vscode npm run build打包报ELIFECYCLE
  • Linux进程深度解析(2):fork/exec写时拷贝性能优化与exit资源回收机制(进程创建和销毁)
  • 嵌入式学习的第三十五天-进程间通信-HTTP
  • 【论文阅读51】-CNN-LSTM-安全系数和失效概率预测
  • FalconFS: Distributed File System for Large-Scale Deep Learning Pipeline——论文阅读
  • Multiscale Structure Guided Diffusion for Image Deblurring 论文阅读
  • ZYNQ芯片,SPI驱动开发自学全解析个人笔记【FPGA】【赛灵思
  • 秋招Day19 - 分布式 - 理论
  • 【论文阅读】-《GenAttack: Practical Black-box Attacks with Gradient-Free Optimization》
  • 在 Azure 中配置 SMS 与 OTP
  • 高效算法的实现与优化是计算机科学的核心,直接决定了程序的性能和资源消耗。下面针对排序算法、搜索算法和动态规划,深入探讨其高效实现与关键优化技术。
  • 如何用js自动触发deepseek输入并发送,不调用api的情况
  • Java 流(Stream)分类、用途与性能分析
  • 【Web】DASCTF 2025上半年赛 wp
  • 非参数密度函数估计(1)
  • 职坐标解析:人工智能产业现状
  • C#(数据类型)
  • Swagger详解API 文档
  • C#(基本语法)
  • C语言中奇技淫巧04-仅对指定函数启用编译优化
  • 恋爱时间倒计时网页设计与实现方案
  • C#观察者模式示例代码
  • Idefics2:构建视觉-语言模型时,什么是重要的