)
本篇核心知识内存单元、指针概念、取地址 / 解引用、多级指针、指针与数组、字符串常量、二维数组指针、大小端模式一、内存单元概念内存按字节划分基本存储单位1 字节 8 位二进制每个单元有唯一整数编号内存地址。特性地址是整数本质为指针类型数据。地址占用空间固定32 位系统 4 字节、64 位系统 8 字节。代码示例int a 10; // a 是a的内存地址整数编号 cout a endl;二、指针基础概念指针是存储内存地址的特殊变量用于间接访问内存数据。特性指针变量自身占固定空间4/8 字节仅存地址。*有两种作用定义时标识变量为指针。使用时解引用通过地址访问对应内存数据。取地址符获取变量首地址。代码示例int a 20; int *p a; // 定义指针p指向a cout a endl; // a的地址 cout p endl; // p存储的地址同a cout *p endl; // 解引用访问a的值20相似概念比较取地址 vs *解引用变量获取变量地址从数据→地址。*指针通过地址取数据从地址→数据。三、指针变量特性概念指针是独立变量有自身内存空间、地址和值存储的目标地址。特性指针类型指向的数据类型 *如int*指向 int。指针值可修改指向可变更。指针的赋值可以是1有效地址指向变量、数组、堆内存、函数的合法地址。✅ 可用2空指针nullptr不指向任何内存✅ 安全必须初始化3野指针随机值 / 已释放 / 越界地址❌ 非法绝对不能用指针自身有地址可被更高层级指针指向。代码示例int a 30; int *p a; cout p endl; // 指针p自身的地址 p nullptr; // 修改指针指向四、多级指针概念指向指针的指针二级 / 多级指针用于间接访问多层地址。特性二级指针定义类型 **指针名如int **pp。访问规则n 级指针需 n 次解引用取目标数据。代码示例int a 40; int *p a; int **pp p; // 二级指针指向p cout **pp endl; // 两次解引用40五、指针与数组名概念数组名是首元素地址常量指针指针可替代下标访问数组元素。特性数组名 首元素地址不可修改。访问等价arr[i] *(arri) *(pi)。数组元素指针指向单个元素如int*数组指针指向整个数组。代码示例int arr[3] {1,2,3}; int *p arr; // p指向首元素 cout arr[1] endl; // 2 cout *(arr1) endl;// 2 cout *(p1) endl; // 2六、字符串常量概念不可修改的字符序列用const修饰存只读内存区。特性const char* str abc内容不可改指针指向可改。本质字符串常量是地址常量末尾含\0。代码示例const char* str hello; // str[0] H; // 错误不可修改 str world; // 正确修改指针指向七、二维数组与指针概念通过指针间接访问二维数组元素支持灵活地址偏移。特性二维数组名指向首行的地址。访问arr[i][j] *(*(arri)j)。下标可负支持反向偏移谨慎使用。代码示例int arr[2][2] {{1,2},{3,4}}; cout arr[1][0] endl; // 3 cout *(*(arr1)0) endl;// 3八、大小端模式概念数据多字节存储时高低字节在内存的排列顺序分大端、小端。特性大端高位存高地址低位存低地址原样。小端低位存低地址高位存高地址按字节倒序。验证用 char 指针读取多字节变量首字节判断。代码示例int num 0x12345678; int *pn num; char *pc (char*)pn; // 小端输出78大端输出12 printf(%X\n, *pc); // %X两位