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,“->”是用于指针访问