C语言学习笔记(十)——指针基础与数组指针应用

发布时间:2026/8/1 5:30:19
C语言学习笔记(十)——指针基础与数组指针应用 一、指针的概念1. 什么是地址计算机中的变量都存储在内存空间中。为了区分不同的内存空间计算机会给每一个存储单元分配一个编号这个编号就是地址int num 10;变量num在内存中有自己的存储空间同时也具有对应的地址。可以通过num获取变量num的地址。二、什么是指针指针可以理解为存储地址的变量。普通变量保存的是数据int num 10;而指针变量保存的是地址int *p;例如int num 10; int *p; p num;此时num 10 p num的地址指针变量p指向变量num。三、指针变量定义指针变量定义格式数据类型 *变量名;例如int *p; char *str; double *q;不同类型的指针表示int *指向整型数据char *指向字符型数据double *指向双精度数据四、指针相关运算符C语言中指针主要涉及两个运算符1. 取地址运算符作用获取变量在内存中的地址。示例#include stdio.h int main() { int num 100; printf(%p\n,num); return 0; }输出0x7ffdxxxx2. 取值运算符*作用通过地址访问对应空间中的数据。示例#include stdio.h int main() { int num 100; int *p; pnum; printf(%d\n,*p); return 0; }运行结果100其中*p表示访问指针指向空间中的数据。五、指针变量案例通过指针修改变量值#include stdio.h int main() { int num 10; int *p; pnum; *p100; printf(num%d\n,num); return 0; }运行结果num100说明通过指针可以直接修改变量所在内存空间的数据。六、野指针与空指针1. 野指针野指针未初始化或者指向已经释放空间的指针。例如int *p;此时p没有明确指向。错误使用*p10;可能导致程序异常。因此不要使用未经初始化的指针。2. 空指针空指针指向地址0x0的指针。定义int *pNULL;例如int *pNULL; *p10;由于空地址不可访问会导致程序崩溃。七、指针运算指针支持部分算术运算。例如p;表示指针向高地址方向移动一个数据类型大小。如果int *p;执行p;地址会增加sizeof(int)个字节。八、指针作为函数参数之前学习函数参数传递时值传递无法修改外部变量void change(int a) { a100; }调用后外部变量不会改变。如果希望修改外部变量需要使用地址传递。示例#include stdio.h void change(int *p) { *p100; } int main() { int num10; change(num); printf(%d\n,num); return 0; }运行结果100原因函数接收的是变量地址通过指针修改原变量。九、一维数组与指针关系C语言中数组名可以理解为指向数组第一个元素的指针。例如int a[5]{1,2,3,4,5};定义指针int *p; pa;等价于pa[0];十、数组元素访问与指针数组访问a[2]等价于*(a2)也等价于*(p2)还可以写p[2]例如#include stdio.h int main() { int a[5]{10,20,30,40,50}; int *pa; printf(%d\n,*(p2)); return 0; }输出30十一、一维数组传参数组作为函数参数时可以传递int fun(int array[],int len);也可以写int fun(int *array,int len);两种形式效果相同。十二、利用指针封装冒泡排序利用数组指针可以封装排序函数#include stdio.h void BubbleSort(int *p,int len) { int i,j,tmp; for(i0;ilen-1;i) { for(j0;jlen-1-i;j) { if(p[j]p[j1]) { tmpp[j]; p[j]p[j1]; p[j1]tmp; } } } } int main() { int a[5]{5,3,8,1,2}; BubbleSort(a,5); for(int i0;i5;i) { printf(%d ,a[i]); } return 0; }运行结果1 2 3 5 8结语指针是 C 语言学习过程中一个重要的分水岭。相比之前学习的变量和数组指针更加接近计算机底层可以直接操作内存地址。:虽然指针初学时理解起来比较困难但掌握指针之后可以编写更加灵活、高效的程序。