嵌入式学习day29 指针复习

2024-03-03 12:36

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

1.指针:
    1.提供一种间接访问数据的方法
    2.空间没有名字,只有一个地址编号

2.指针:
    1.地址:区分不同内存空间的编号
    2.指针:指针就是地址,地址就是指针
    3.指针变量:存放指针的变量称为指针变量,简称为指针

3.指针的定义:
    int *p = NULL;
    int *q = NULL;
    char *p = NULL;
    double *p = NULL;
    struct student *p = NULL;

    野指针:指向随机空间的指针
    空指针:指向内存地址为0x0的空间的指针

    注意:定义指针一定要初始化,防止成为野指针

4.指针的运算符:
    *: *p作为右值:获得指针指向空间中的值 
       *p作为左值:将右值放入指针指向的空间

    &:获得一个变量在内存空间中的首地址

5.指针的算数运算:
    +
    -
    ++
    --

    p+1:向内存高地址偏移指向的数据类型大小个字节空间
    p-q:两个地址中间差了多少个指向的数据类型
    
6.不同类型的指针操作上有哪些不同
    char *p;
    int *p;
    double *p;
    struct student *p;    

==================================================================================================================================================


1.指针数组和数组指针:


    数组指针:
        int (*a)[5]
        定义一个指针变量a,占8个字节空间,指向20个字节空间

        int a[5] = {1, 2, 3, 4, 5};
        
        a == &a[0] == int *
        注意:
            大部分情况下a可以理解为int*型,有2中特殊情况除外
            1.sizeof运算时  
                sizeof(a): 20
                sizeof(int *): 8
            2.&运算符
                &a:int (*)[5]
                &int *: int ** 

         数组指针特点:
            1.对一维数组数组名&得到数组指针,值不变,类型升级为指向整个数组的指针
            2.对数组指针*,值不变,类型降级为指向数组第一个元素的指针

    指针数组:
        int *a[5];
        定义一个数组a,有5个元素,每个元素为int *型,占40个字节空间

        char *pstr[5];

        操作多个字符串时,通过将每个指针指向一个字符串开头,完成对所有字符串的操作,使用指针数组

        指针数组和二维数组的区别:
            存储字符串数组使用二维数组
            操作字符串数组使用指针数组

指针和数组的关系:


    1.指针和一维数组的关系:
        int a[5] = {1, 2, 3, 4, 5};
        int *p = NULL;

        p = &a[0];
        p = a;

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

        a == a[0]

        访问第n个元素:
        a[n] == *(a+n) == *(p+n) == p[n]

    2.指针和二维数组的关系:
        int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
        int *p = NULL;
        int (*q)[3] = NULL;

        p = &a[0][0];
        p = a[0];
        p = *a;
        q = a;

        数组的数组名a是指向数组第一行元素的数组指针

        访问第m行第n列元素方式(N是每行的列数):
        a[m][n]
        *(a[m]+n)
        *(*(a+m)+n)
        *(p+m*N+n)
        *(*(q+m)+n)
        *(q[m]+n)
        q[m][n]

    3.指针操作字符串(字符串的遍历)
        char str[32] = {"hello world"};
        char *p = NULL;

        p = str; 
        while (*p != '\0')
        {
            p++;
        }

函数指针和指针函数:


    函数指针:
        int (*p)(int, int) = NULL;
        定义一个指针变量p,p是指向一个int返回值且有2个int参数的函数的指针

    指针函数:
        int *p(int a, int b)
        {

        }

        定义一个函数,函数的返回值是指针

        注意:
            绝对不能返回局部变量的地址,否则函数调用结束后,会清除局部变量的空间(栈),应该返回例如数据区的地址,这样函数调用结束后,仍可通过返回的地址访问数据区的数据。

这篇关于嵌入式学习day29 指针复习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx