OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5469|回复: 2

关于指针使用的问题,一点小小的总结

[复制链接]

44

主题

225

帖子

0

精华

高级会员

Rank: 4

积分
660
金钱
660
注册时间
2013-11-22
在线时间
131 小时
发表于 2014-2-17 14:29:56 | 显示全部楼层 |阅读模式
写程序的时候经常想用指针,因为指针操作的速度快,但是程序
常常因为使用了指针,而无故卡死,检查许久才发现是指针的问题

例如:
程序中使用到的下面的函数就卡死了
/***********(1)******************/
void SC_SaveDLLD1NUM(u16 Savedata)
{
 u8 *p;
 if(Savedata>9999)Savedata=9999;
 *p=(u8)(Savedata>>8);  //高字节在前
 *(p+1)=(u8)(Savedata&0x00ff); //低字节在后
 AT24CXX_Write(121,p,2);
};
将它改为下面这样的就好了!
/***********(2)***************/
 void SC_SaveDLLD1NUM(u16 Savedata)
{
 u8 p[2]={0,0};
 if(Savedata>9999)Savedata=9999;
 p[0]=(u8)(Savedata>>8);  //高字节在前
 p[1]=(u8)(Savedata&0x00ff); //低字节在后
 AT24CXX_Write(121,p,2);
};
我个人理解是在定义指针之后应该立马分配地址,不然该指针的指向就是不定的,甚至可以说是危险的,
它可能会导致你整个系统的崩溃,这不是危言耸听,你定义了指针,但不指定其指向的地址,程序当中
若使用诸如*(p+x)=NNN;之类的语句,看起来没有问题,但它可能已经更改了你程序当中正在使用的非
常有用的变量,导致程序紊乱。
关于指针的使用及注意事项,高手们可以继续添加各自使用当中所遇到的问题及解决方法,分享一下!最好有实际的例子哦
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-2-17 14:55:26 | 显示全部楼层
俗称“野指针”,一般将指针初始化赋值为NULL来避免问题
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

44

主题

225

帖子

0

精华

高级会员

Rank: 4

积分
660
金钱
660
注册时间
2013-11-22
在线时间
131 小时
 楼主| 发表于 2014-2-17 15:03:37 | 显示全部楼层
回复【2楼】745021926:
---------------------------------
谢谢指导!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-5 15:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表