掌握C语言指针与内存管理
1. 内存基础知识
在编程世界中,内存管理和指针操作是C语言的核心概念,尤其在嵌入式系统编程中更是如此。内存是由地址标识的存储单元组成的,每个地址对应着特定大小的数据项。例如,在许多微控制器中,每个地址包含一个8位的数据项。内存可以分为随机存取存储器(RAM)和只读存储器(ROM)。RAM用于存储程序运行时的数据,而ROM则用于存储程序代码和常量数据。
内存地址从0开始,但实际可用的RAM位置可能有限。例如,某款微控制器的可用RAM从地址0x20开始,地址0x00到0x1F用于控制处理器和外围设备的特殊功能寄存器(SFRs)。编译器会为程序变量分配特定的内存位置。例如,以下是一些变量内存分配的视觉表示:
图 10.1: 示例随机存取存储器布局。
2. 地址操作符
一元运算符 &
是地址操作符,用于获取变量的内存地址。例如:
int a = 10;
printf("%p\n", &a); // 输出变量a的地址
地址操作符只能与左值操作数(通常是变量)一起使用,表达式或常量是不合法的。
3. 间接操作符
一元运算符 *
是间接操作符,用于访问指定内存位置的值。例如:
int a = 10;
int *p = &a;
prin