• 未初始化的指针


    1.我们定义了一个指针,一定要初始化,比如 int* a,没有初始化时,a的指向是不明确的。若它指向非法地址,这时的操作会报异常;若它指向一个合法地址,这是非常危险的,因为这样可能更改一个正在使用的数值。若在MCU中,指针指向非法地址,程序会跑飞。

    2.关于NULL指针,有时我们会写一个函数,这个函数返回一个值,但有时这个值可能会不存在,那么就需要返回一个代表这个值不存在的值。这样,就会造成一个值代表两种不同的意思,这是违背软件工程的原则的。这时,我们应该返回一个bool型的变量,代表这个值是不是有效的,然后将返回的值放在指针型参数中。

    3.有时我们知道地址的具体值,比如我们要往地址为100的地方存入一个数:*100=25,但这个表达式是非法的,因为100是整型,间接访问操作(*)只能作用于指针类型表达式,所以我们需要将100强制转换成指针:*(int*)100=25,在MCU中,我们经常可以看到

    #define ADC0_BASE         (0x40002000UL) /**< ADC0 base address  */
    #define ADC0         ((ADC_TypeDef *) ADC0_BASE)            /**< ADC0 base pointer */
    其中ADC0_BASE是一个unsigned long类型的常量,我们将这个常量转换成ADC_TypeDef类型的指针,那么,在以后的编程中,我们就可以使用ADC0这个指针了:ADC0->REG0,“->”是用于指针访问

  • 相关阅读:
    通用Logging框架设计
    slf4j 与各个 logging框架的适配器说明
    优雅的使用Spring
    Python : 反射
    Python: Tools
    Python : Class
    Python : Module
    Python 入门:基本语法
    docker:版本变更
    Linux: yum配置说明
  • 原文地址:https://www.cnblogs.com/season-peng/p/6713522.html
Copyright © 2020-2023  润新知