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

server/2024/9/24 8:01:46/

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);
 


http://www.ppmy.cn/server/20269.html

相关文章

【六十】【算法分析与设计】用一道题目解决dfs深度优先遍历,dfs中节点信息,dfs递归函数模板进入前维护出去前回溯,唯一解的剪枝飞升返回值true

路径之谜 题目描述 小明冒充X星球的骑士,进入了一个奇怪的城堡。 城堡里边什么都没有,只有方形石头铺成的地面。 假设城堡地面是nn个方格。如下图所示。 按习俗,骑士要从西北角走到东南角。可以横向或纵向移动,但不能斜着音走,也不能跳跃。每走到一个新方格,就要向正北 方和正西…

Java 提取HTML文件中的文本内容

从 HTML 文件中提取文本内容是数据抓取中的一个常见任务,你可以将提取的文本信息用于编制报告、进行数据分析或其他处理。本文分享如何使用免费 Java API 从HTML 文件中提取文本内容。 安装免费Java库: 要通过Java提取HTML文本,需要用到Free…

科技改变视听4K 120HZ高刷新率的投影、电视、电影终有用武之地

早在1888年,法国生理学家埃蒂安朱尔马莱就发明了一套盒式摄像机,能以120帧/s的速度在一条纸膜上曝光照片,但是当时没有相匹配的放映设备。而马莱的另一套拍摄设备是60帧/s的规格,并且图像质量非常好。 受此启发,雷诺的…

Redis之路系列(5)功夫在诗外

5 拓展篇—功夫在诗外 6.0新特性 相对都比较鸡肋,谨慎在生产环境使用 ACL安全策略 Redis6版本推出了ACL(Access Control List)访问控制权限 的功能,基于此功能,可以设置多个用户,并且给每个用户单独设 置命令权限和数据权限。 …

火绒安全:全面守护你的数字世界

火绒安全:全面守护你的数字世界 在数字化时代的浪潮中,我们的电脑和生活已经紧密相连。然而,网络安全问题也如影随形,恶意软件、病毒、间谍软件等安全威胁层出不穷。作为一名国际著名的病毒程序软件专家,我深知一款高…

iOS AVPlayer

参考文章 AVPlayer的基本使用

【macOS】M芯片安装windows10以及配置office

背景 M3芯片Macbook ProParallel Desktop19office word visio打算配置一个好用的笔记本,携带着尽快把论文的正文写完,macOS里面的word排版可能出错,所以像配置一个双系统,里面必然要有的是word和visio,其他没有要求 …

[每周一更]-(第94期):认识英伟达显卡

英伟达显卡:引领图形计算的领先者,显卡也常称为GPU(图形处理器 Graphics processing unit),是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上执行绘图运算工作的…