资讯动态

指针初阶:从零到一,彻底搞懂 C 语言指针的核心奥秘

发布时间:2026/9/28 11:46:30 来源:尧图企业网站定制
C语言学习记录日期 9.21今日知识点 ——指针是什么指针是编程语言中的一个对象利用地址它的值直接指向存在电脑存储器中的另外一个地方的值。由于通过地址就能找到所需的变量单元可以说地址指向该变量单元。因此将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。练习代码总结指针就是变量用来存放地址的变量存放在指针中的值都被当成地址处理一个小的单元到底是多大1 个字节int main(){int a 10;//在内存中开辟一块空间 int * pa a;//这里我们对变量a取出他的地址可以使用操作符将a的地址存放在p变量中p就是一个指针变量 *pa 20;//对指针pa进行解引用操作通过pa中存放的地址找到变量a并将a的值修改为20 return 0;}今日知识点 ——指针和指针类型//指针的大小只取决于操作系统的位数寻址能力而与它指向的数据类型无关。int main(){int *pa; char *pc; float *pf; printf(%d\n,sizeof(pa));//8 printf(%d\n,sizeof(pc));//8 printf(%d\n,sizeof(pf));//8 return 0;}//指针的类型决定了对指针解引用的时候有多大的权限能操作几个字节比如char的指针解引用就只能访问一个字节而int的指针的解引用就能访问4个字节。练习代码今日知识点 ——野指针什么是野指针野指针就是“指向了不该指向的地方”的指针使用它等于在乱闯内存极易引发崩溃如何规避野指针1.指针初始化2.小心指针越界3.指针指向空间释放及时置NULL4.指针使用之前检查有效性练习代码intmain(){int*pNULL;//明确知道初始化的值int*ptra;//C语言本身不会检查数据的越界行为//错误示范//int* p NULL;//*p 10;//正确应为intpNULL;if(p!NULL)*p10;return0;}intmain(){intarr[10]{1,2,3,4,5,6,7,8,9,10};int*parr;// p 指向数组首元素int*pendarr9;// pend 指向最后一个元素下标 9while(ppend)// 只要 p 还没越过最后一个元素就继续{printf(%d\n,*p);p;// p 向后移动}return0;}它对应“如何规避野指针”中的第 2 条小心指针越界◦ 数组 arr 有 10 个元素合法下标是 0~9。◦ pend arr 9 指向最后一个合法元素下标 9。◦ 循环条件 p pend 保证 p 最多走到 pend不会越过数组末尾因此不会访问到数组之外的内存也就不会产生野指针。如果去掉边界检查就会变成野指针如果把循环条件改成 while (1) 或 while (p arr 100)p 就会一路递增越过数组末尾继续访问非法内存——此时 p 就成了野指针解引用 *p 会读取到未知数据甚至导致程序崩溃。今日知识点 ——指针运算指针指针的前提指针减指针的前提是两个指针指向同一块空间练习代码intmain(){intarr[10]{1,2,3,4,5,6,7,8,9,10};charc[5];//指针减指针的前提是两个指针指向同一块空间//printf(%d\n,arr[9] - ch[0]);//不能减因为不是指向同一块空间printf(%d\n,arr[9]-arr[0]);return0;}//计数器//int my_strlen(char* str)//{// int count 0;// while(*str ! \0)// {// count;// str;// }// return count;//}//指针减指针intmy_strlen(char*str){char*startstr;while(*str!\0){str;}returnstr-start;}intmain(){//strlen();//求字符串长度//递归intlenmy_strlen(abc);printf(%d\n,len);return0**知识点总结**1.**计数器法求字符串长度**用 count 变量累加遍历字符串直到 \0返回 count。2.**指针减指针求字符串长度**用 char*startstr 记录起始地址str 走到 \0 后str-start 即为长度前提是两个指针指向同一块空间。3.**字符串以 \0 结尾**while(*str!\0) 是遍历终止条件\0 是字符串结束标志。4.**指针自增运算**str 让指针向后移动一个字符1字节。5.**函数传参数组/字符串退化为指针**my_strlen(abc) 传入字符串首地址形参 char*str 接收。6.**指针运算的实际应用**用「指针减指针」替代计数器体现指针运算的灵活用法。7.**递归思路注释中提及**可用递归实现即 1my_strlen(str1) 的递归写法。;}

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑