循环体是否会影响指针所指向的变量

[复制链接]
1156|19
手机看帖
扫描二维码
随时随地手机跟帖
zhuxuezhou|  楼主 | 2019-1-24 15:36 | 显示全部楼层 |阅读模式
各位大佬 我定义了两个指针变量 其中一个指针所指向的变量改变后我作了一次无关指针的循环函数,但是我发现另一个指针所指向的变量发生了改变。请问循环体是否会真的影响指针所指向的变量 如果是 那如何避免
下面是我的循环函数
void bun()
{
   
    unsigned int w;
    RC6=1;
    PORTD=0X87;
    RC6=0;
    RC7=1;
    PORTD=0X8f;
    RC7=0;
    for(w=6272;w>0;w--)
    {
        PORTF=0XA0;
        delayus();
        PORTF=0XAA;
        delayus();
    }
}
ayb_ice| | 2019-1-24 15:40 | 显示全部楼层
不是这里引起的

使用特权

评论回复
评论
zhuxuezhou 2019-1-24 15:42 回复TA
但是如果我把循环注释掉那其他指针就没有改变 
大卫颂| | 2019-1-24 15:40 | 显示全部楼层
很抱歉, 我可能学的是假的指针...
unsigned int *p, 这样的才是指针吧?

使用特权

评论回复
评论
zhuxuezhou 2019-1-24 15:43 回复TA
是这样的 指针我是定义在开头 这只是循环体 
zhuxuezhou|  楼主 | 2019-1-24 15:45 | 显示全部楼层
unsigned char fx;
                TXREG2=0x0f;
                while(!TRMT2);
                sum_re=0;
                xor_re=0;
                add=ss[2];
                ref=3;
                bef=*p;
                def=*r;
                bbef=*pp;
                ddef=*rr;
                cef=*q;
                if(ss[0]==4)
                {
                    LPD();
                }
                for(fx=ss[0];fx>0;fx--)
                {
                    i=(unsigned char*)add;
                    *i=ss[ref];
                    ref++;
                    add++;
                }
                return;
这是主要部分 其实是串口接收到多个数据 以校验码结尾的通讯协议 我这里是成功接收后所进行处理的代码 可能比较乱所以开头没有放出来

使用特权

评论回复
zhuxuezhou|  楼主 | 2019-1-24 15:46 | 显示全部楼层
void LPD()//远近
{
    if(ss[2]==0x28)
    {
        if(cef==0x20&&ss[3]==0x00)
        {
            sideinit();
        }
        if(cef==0x00&&ss[3]==0x20)
        {
            bun();
        }
    }
}

使用特权

评论回复
zhuxuezhou|  楼主 | 2019-1-24 15:49 | 显示全部楼层
我是验证*q 然后发送6000多个脉冲(用for循环) 发送结束发现*p和*r发生了改变 所以想问下大家如何避免循环函数对指针的改变

使用特权

评论回复
大卫颂| | 2019-1-24 16:27 | 显示全部楼层
zhuxuezhou 发表于 2019-1-24 15:45
unsigned char fx;
                TXREG2=0x0f;
                while(!TRMT2);

你这是高级程序员的做法啊..
对单片机的开发而言, 资源非常有限, 只有1~2个间接寻址寄存器,指针用得过多, 反而可能不效率..

使用特权

评论回复
评论
zhuxuezhou 2019-1-24 16:35 回复TA
好的 我也是初学者 所以代码就不是很规范 谢谢指点 
大卫颂 2019-1-24 16:33 回复TA
@zhuxuezhou :优化一下算法先吧.....觉得你写的是比较乱的..^_^ 
zhuxuezhou 2019-1-24 16:30 回复TA
我也不想这么做啊 主要是串口协议规定了地址 那必须就要靠指针存取 
淘猫汤姆| | 2019-1-24 21:26 | 显示全部楼层
zhuxuezhou 发表于 2019-1-24 15:49
我是验证*q 然后发送6000多个脉冲(用for循环) 发送结束发现*p和*r发生了改变 所以想问下大家如何避免循环 ...

如果你用的芯片和调试器支持的话,你可以使用高级断点来在对特定ram有改变的时候停下来,这样可以帮你发现是谁干了坏事

使用特权

评论回复
ayb_ice| | 2019-1-25 08:36 | 显示全部楼层
zhuxuezhou 发表于 2019-1-24 15:45
unsigned char fx;
                TXREG2=0x0f;
                while(!TRMT2);

有可能是数组越界了

使用特权

评论回复
gyxlzc| | 2019-1-25 09:10 | 显示全部楼层
楼主检查一下下面这个赋值语句对不对?add=ss[2];

使用特权

评论回复
小卡| | 2019-1-25 10:07 | 显示全部楼层
欢迎发帖~ 下次发言记得选产品分类 

使用特权

评论回复
奔波儿熊| | 2019-1-25 12:22 | 显示全部楼层
循环体当然不会影响指针所指向的变量,这种情况要么出现一些数组越界,要么程序确实有地方改动,只是你没注意, 建议上详细代码.

使用特权

评论回复
kingkits| | 2019-1-26 13:01 | 显示全部楼层
                for(fx=ss[0];fx>0;fx--)
                {
                    i=(unsigned char*)add;
                    *i=ss[ref];
                    ref++;
                    add++;
                }

这段代码写得稀里糊涂,你仔细看看把

使用特权

评论回复
vcvfvgvb| | 2019-1-28 13:51 | 显示全部楼层
估计是循环体运行的时候其他程序段改动了。

使用特权

评论回复
scottmaxwell| | 2019-1-29 22:53 | 显示全部楼层
你说的问题肯定不存在,至于你的问题,你给的代码根本没有办法看

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

11

帖子

1

粉丝