
指针总结1. 指针是什么指针是地址即内存单元的编号。它是一种数据类型专门用来处理“地址”这种数据。指针与普通变量的区别特性普通变量指针变量存储内容数据值内存地址用途存储数据存储地址用于间接访问数据定义指针变量int *p; // 定义一个指向 int 类型的指针变量 pint基类型表示指针所指向的数据类型。*定义指针时的符号表示该变量是一个指针。p指针变量名。指针的大小系统地址大小字节32位系统464位系统82. 指针的使用获取变量的地址int a 10; int *p a; // p 存储了 a 的地址解引用操作**p 20; // 修改 a 的值为 20指针运算运算说明p 1地址增加一个基类型大小p - 1地址减少一个基类型大小p - q计算两个指针之间的差值需同类型p q比较地址大小3. 指针与数组数组与指针的关系数组名代表首元素的地址即a a[0]。通过指针可以访问数组元素int a[5] {1, 2, 3, 4, 5}; int *p a; printf(%d, *(p 2)); // 输出 3### 一维数组 - 通过指针遍历数组 c for (int i 0; i 5; i) { printf(%d , a[i]); }二维数组二维数组的指针形式int a[3][4]; int (*p)[4] a; // 指向一个包含 4 个 int 的数组通过指针访问二维数组元素printf(%d, p[1][2]); // 等价于 a[1][2]--- ## 4. 指针与函数参数 ### 值传递 vs 地址传递 | 传递方式 | 是否能修改主调变量 | 说明 | |----------|--------------------|------| | 值传递 | 否 | 传递的是变量的副本 | | 地址传递 | 是 | 传递的是变量的地址可修改主调变量 | ### 示例通过指针修改主调变量 c void addOne(int *p) { *p *p 1; } int main() { int n 10; addOne(n); // 通过地址传递修改 n 的值 printf(n %d , n); // 输出 11 return 0; }5. 指针的高级应用指针数组指针数组是数组中的元素是指针。char *strs[3] {Hello, World, C};数组指针数组指针是指向整个数组的指针。int a[3][4]; int (*p)[4] a; // p 指向 a 的第一行多重指针 指针的指针二级指针int a 10; int *p a; int **pp p; // pp 是指向指针 p 的指针 printf(%d , **pp); // 输出 106. 指针的常见问题问题说明空指针指针未初始化或指向无效地址可能导致程序崩溃指针越界操作超出数组范围导致未定义行为内存泄漏动态分配的内存未释放导致资源浪费7. 指针的应用场景应用场景说明动态内存分配使用malloc、calloc等函数分配和释放内存字符串处理通过指针操作字符串如strcpy、strlen等函数参数传递通过地址传递实现被调函数对主调函数变量的修改数据结构表示复杂的数据结构如链表、树、图等8. 指针的优缺点优点缺点高效访问内存使用不当容易出错支持动态内存管理学习难度较高可以直接操作硬件指针越界、空指针等问题难以调试9. 指针的总结项目内容指针本质地址用于间接访问内存指针类型根据所指向的数据类型定义指针运算支持加减、比较等操作指针与数组数组名是首元素地址指针可用于遍历数组指针与函数通过地址传递实现被调函数对主调函数变量的修改指针的高级应用指针数组、数组指针、多重指针等指针是 C 语言的核心特性之一掌握指针是学习 C 语言的关键。参考来源C语言数组之指针数组和数组指针C语言中指针和数组详解C语言指针数组和数组指针详解C语言指针操作三通过指针引用数组C语言指针操作九指针数组和多重指针