嵌入式学习——C语言基础——day10

2024-04-27 02:52

本文主要是介绍嵌入式学习——C语言基础——day10,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 指针的基本概念

1.1 地址

        用来区别不同内存字节空间的编号

1.2 指针

        地址就是指针,指针就是地址,地址是一个编号,指针多了指向的概念

1.3 指针变量

        用来存放指针的变量,有时将指针变量简称为指针

2. 指针相关运算符

        &    ——    取地址运算符,获得变量在内存中的首地址

                注意:

                        1. 只能对变量进行操作

                        2. &运算符连接表达式的值为变量在内存空间中的首地址

                        3. &会让变量升级

                                int         ->     int *

                                char      ->     char *

                                double  ->     double  *

        *    ——   左值:创建指针变量      右值:取指针对应空间的值

                注意:

                        1. 只有指针才能进行*运算

                        2. *运算让变量降级

                                int *            ->          int 
                                double *     ->         double 
                                char *         ->         char

                        3. 

                                int *p               *p获得该地址开始向下4字节空间中的值

                                double *p        *p获得该地址开始向下8字节空间中的值

                                char *p            *p获得该地址开始向下1字节空间中的值      

                        4.   如果*和&同时出现,作用相互抵消:*&a   ==   a

3. 指针变量的定义

        数据类型  *变量名

            int *p;            p指向四个字节空间首地址
            double *p;     p指向八个字节空间首地址
            char *p;         p指向一个字节空间首地址

                注意:

                        1. 在64位操作系统中,指针都占八个字节的空间

                        2. 野指针:未经初始化的指针或指向已经被释放空间的指针

                        3. 在指针定义时,必须要初始化,不能使用未经定义的指针

4. 指针的初始化

            int *p = NULL;

            NULL:空指针(指向内存地址为0x0的指针,类似于整形变量的初始化0值)

5. 指针的算数运算(int *p = NULL)

        +          p+1   (p指针向内存高地址偏移4个字节空间)

        -           p-1   (p指针向内存低地址偏移4个字节空间)

                    两个相同类型的指针相减:获得两个地址中间相差了多少个该类型的元素

        ++        向内存高地址偏移指向数据类型大小个字节空间

        --          向内存高地址偏移指向数据类型大小个字节空间

6. 指针常见操作

        1.指针变量本身,也就是p,修改p的值可以改变指针变量的指向
        2.指针变量指向的空间,也就是*p,修改*p的值并不能改变指针变量的指向,只是利用指针修改对应空间中的值

7. 指针作为函数参数(地址传递)

        注意:        

                1. 函数传参分为值传递和地址传递

                2. 函数体内想修改函数体外的值用地址传递

8. 指针和数组的关系

8.1 指针和一维数组的关系

        int a[32];

        int *p = &a[0];

        1. 数组名是指向数组第一个元素的指针

                     a == &a[0]      

        2. 访问数组下标为n的元素

                a[n] == *(a + n) == p[n] == *(p + n)

                一般形式: 指针[偏移量] == *(指针 + 偏移量)

                注意:p为指针变量,能够进行++操作,允许p++

                           a为数组的首地址常量,不能进行++操作,不允许a++ 

9. 指针作为函数参数

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

    第一种:
    int fun(int array[], int len); 其中array[]的 [] 可以为任意值

    第二种:
    int fun(int *parray, int len);
 

这篇关于嵌入式学习——C语言基础——day10的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/939342

相关文章

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

Go语言使用sync.Mutex实现资源加锁

《Go语言使用sync.Mutex实现资源加锁》数据共享是一把双刃剑,Go语言为我们提供了sync.Mutex,一种最基础也是最常用的加锁方式,用于保证在任意时刻只有一个goroutine能访问共享... 目录一、什么是 Mutex二、为什么需要加锁三、实战案例:并发安全的计数器1. 未加锁示例(存在竞态)