数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 2714|回复: 6

[C51] 指针乘法运算出错,求解释原因

[复制链接]
发表于 2021-4-7 21:38:16 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
本帖最后由 广东梁百万 于 2021-4-7 21:47 编辑

C51单片机,初学C语言,做了指针的上机验证,程序以下——
我在按键那每按一次就执行一次下面其中一个指针测试函数,执行后在LCD1602那显示出变量 c 的值,
运算目的是 c = a * b  ,只是我用指针 指向 a  b  c 作运算
第1次  指针测试函数2 执行后,c的值是9,  再按一次键 重复执行一次,  c的值是27,再一次 是63   ,再一次 是  135  ,  ..........这明显是错误。
指针测试函数3 和指针测试函数4,得到的值始终是6, 这个正确。

那  指针测试函数2  到底是哪里出问题?  求解,谢谢。

          unsigned char a=2;
          unsigned char b=3;
          unsigned char c=0;

          unsigned int *DPTR1;           //指针1
          unsigned int *DPTR2;           //指针2
          unsigned int *DPTR3;           //指针3

//--------------------------------
//--------------------------------

                        void testDPTR2()  //指针测试函数2

                   {
                         DPTR1=&a;
                         DPTR2=&b;
                         DPTR3=&c;

                        *DPTR3 = (*DPTR1) * (*DPTR2);
                        }

//--------------------------------

                        void testDPTR3()  //指针测试函数3

                   {
                         DPTR1=&a;
                         DPTR2=&b;
                         DPTR3=&c;

                        *DPTR3 = a * (*DPTR2);
                        }
//--------------------------------

                        void testDPTR4()  //指针测试函数4

                   {
                         DPTR1=&a;
                         DPTR2=&b;
                         DPTR3=&c;

                        *DPTR3 = (*DPTR1) * b;
                        }


 楼主| 发表于 2021-4-7 22:34:48 | 显示全部楼层
orsonzou 发表于 2021-4-7 22:21
你用int指针指向的char
类型错了

原来如此,我刚把两者都改为同是int 或同是char,  再执行   //指针测试函数2   确实得到正确的值,
但是此前没改时,执行加法    *DPTR3 = (*DPTR1) + (*DPTR2);   得到的值是正确
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-2 06:37 , Processed in 0.124800 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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