C语言初阶(10)
创始人
2024-11-13 20:35:56
0

1.野指针

野指针就是指向未知空间的指针,有以下几种情况

(1)指针未初始化

int main() {     int a=0;    int*b;    return 0; }

上面指针就是没有初始化,形成一种指向一个随机空间的地址的指针,我们可以修改成

int main() {     int a=0;    int*b=NULL;    return 0; }

(2)数组越界访问

数组下标超过数组本身下标时就会造成形成野指针

int main() {    int a[10]={0};    int *b=arr+10;    return 0; }

上面b就是野指针,野指针指向数组后未知的数据

(3)局部变量的指针 

 非主函数局部变量的地址存在主函数指针中就会形成野指针,由于指针指向的空间是有可能被销毁和未知,和不属于程序还给操作系统,如下例

 上面就说明野指针的危害

总结:野指针种类有许多,只要不确定和不受我们掌控的指针我们就可以归类成野指针。

我们应该做到以下几点来避免野指针

1. 指针初始化 2. 小心指针越界 3. 指针指向空间释放即使置NULL 4. 避免返回局部变量的地址 5. 指针使用之前检查有效性

2.指针的运算

指针的加1或者减1都是将根据指针的不同权限将指针后移1个或多个地址

指针之间的减法是计算同种数据类型(也就是有相同权限)的之间的元素个数,结果的绝对值就是元素个数,所以我们就可以简化求字符串长度的函数

指针之间的加法没有意义

指针之间的逻辑运算

 指针之间的> < => =<都是有意义,指针在数组中的指针是由大到小的。我们要注意的是在C语言的标准中指针的比较要求和数组前面的进行比较,而不是和后面进行比较。

 

3.数组和指针

数组中存放的相同类型的数据,指针变量存放的是所指向的地址,我们就可以将指针存放在数组中,形成指针数组,例如

int main() {   int a=0;   int c=0;   int *b[2]={&a,&c};  }

我们可以通过访问数组的形式来进行访问指针对应的空间。 

 我们还可以通过这样的形式建立二维数组并打印

数组名的是首元素的指针,这就是数组和指针之间的联系 

数组在访问时arr[1]相当于*(arr+1)的形式,二者时等价于。

4.二级指针

二级指针是存储一级指针的地址的变量,格式是

int main() {    int a=1;   int*b=&a;   int**c=&b;  }

int*代表了二级指针的指向的空间的数据类型 ,*代表存放的是指针

同样的我们可以将二级指针指向一级指针,然后再获取一级指针的内容。

 

相关内容

热门资讯

玩家必看科普“hhpoker可... 玩家必看科普“hhpoker可以控制牌吗”开挂(透视)辅助软件(解密教程有挂透视)【无需打开直接搜索...
透视辅助!we-poker软件... 透视辅助!we-poker软件,aapoker透视脚本,分享开挂辅助安装(透视有挂技术);无需打开直...
玩家必看“hhpoker辅助靠... 大家好,今天小编来为大家解答这个问题咨询软件客服可以免费测试直接加微信(136704302)了解详细...
透视辅助!哈糖大菠萝挂,wpk... 透视辅助!哈糖大菠萝挂,wpk透视是真的假的,分享开挂辅助插件(透视有挂详细)《详细加薇136704...
指导大家“wepoker免费脚... 指导大家“wepoker免费脚本”开挂(透视)辅助安装(实用技巧有挂详细)>>您好:软件加薇1367...
透视辅助!wepoker私人局... 您好:这款wepoker私人局辅助挂游戏是可以开挂的,确实是有挂的,很多玩家在这款wepoker私人...
透视辅助!pokerworld... wepoker手机版透视脚本是一款专注玩家量身打造的游戏记牌类型软件,在wepoker手机版透视脚本...
透视辅助!aa poker辅助... 来玩app破解版是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微...
记者爆料“模拟器打开hhpok... 记者爆料“模拟器打开hhpoker”开挂(透视)辅助安装(2026版教程证实有挂)>>您好:软件加薇...
透视辅助!wepoker辅助器... 透视辅助!wepoker辅助器如何使用,epoker有透视吗,关于开挂辅助脚本(透视有挂分享);无需...