高级会员

- 积分
- 660
- 金钱
- 660
- 注册时间
- 2013-11-22
- 在线时间
- 131 小时
|
写程序的时候经常想用指针,因为指针操作的速度快,但是程序
常常因为使用了指针,而无故卡死,检查许久才发现是指针的问题
例如:
程序中使用到的下面的函数就卡死了
/***********(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;之类的语句,看起来没有问题,但它可能已经更改了你程序当中正在使用的非
常有用的变量,导致程序紊乱。
关于指针的使用及注意事项,高手们可以继续添加各自使用当中所遇到的问题及解决方法,分享一下!最好有实际的例子哦 |
|