1、如何避免野指针
将指针初始化为NULL,用完后也将其赋值为NULL。
2、什么是大小端模式?请用C语言写出判断函数。
大端模式:内存低地址
存放 数据的高字节
;
小端模式:内存低地址
存放 数据的低字节
。
比如:将一个32位的整数0x12345678存放到一个整型变量(int)中,
大端:12-34-56-78; 小端:78-56-34-12
#include <stdio.h>
void main()
{
int x = 1;
char *p = (char *)&x; //强制类型转换, 指针变量的 地址数据 不变, 影响的只是指针的寻址(偏移)
if (*p) printf("Little-endian \n"); //X86 或者 STM32 运行时打印
else printf("Big-endian \n");
}
3、(int *)
强制转换成(char *)
(注意:X86,STM32是小端模式)
#include <stdio.h>
int main()
{
unsigned int a = 0x11223344; //x86是 小端模式,按照 内存地址递增 存储数据: 44-33-22-11
unsigned char i = (unsigned char)a;
char *b = (char *)&a; //强制类型转换, 指针变量的 地址数据 不变, 影响的只是指针的寻址(偏移)
unsigned int *c = &a;
printf("i= %x, *b = %x\n\n", i, *b); //0x44, 0x44
printf("&a= %08x\n\nb = %08x\n", &a, b);//00affe30, 00affe30(跟&a相等)
b++;
printf("b = %08x\n", b); //00affe31(内存地址+1, 相对&a增加1)
printf("*b = %x\n\n", *b); //0x33
printf("c = %08x\n", c); //00affe30(跟&a相等)
c++;
printf("c = %08x\n", c); //00affe34(内存地址+4)
}