找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

C语言为何更改了一个变量名 程序运行就不对了

查看数: 5015 | 评论数: 24 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-6-4 13:37

正文摘要:

很奇怪 , 只是把变量名”h“改成了"l",程序运行就正常了, 到底问题在哪呢  编程器换了 CPU 也换过了还是同样的现象 变量为名为"l"正常运行时最左面两个数码管到23后清零 变量名改成“h”十位始终 ...

回复

ID:808634 发表于 2021-6-7 12:27
数组定义问题
ID:160500 发表于 2021-6-7 10:59
老董 发表于 2021-6-6 20:47
多谢各位大师指教 真的是数组越界了  本来写程序的时候只想到了用时 ,分,秒,每个两位数共六位数  把那两 ...

数组越界,如果那个地址没有被用到,则不会对程序造成影响,如果是另外一个变量的地址,则会把该变量的的内容给修改,造成数据错误甚至程序崩溃。
ID:849913 发表于 2021-6-6 20:47
多谢各位大师指教 真的是数组越界了  本来写程序的时候只想到了用时 ,分,秒,每个两位数共六位数  把那两个杠杠给忘了  越界了又不报错  看来真是一点也不能马虎  但是也没搞懂 为何越界了会出现这样的现象  
ID:933551 发表于 2021-6-5 21:56
u8 time[6];数组访问越界了,适逢地址的变量会被意外改写。

评分

参与人数 1黑币 +6 收起 理由
老董 + 6 很给力!

查看全部评分

ID:160500 发表于 2021-6-5 19:02
npn 发表于 2021-6-5 16:05
定义的变量:

Keil为变量分配的内存地址:

keil的内存分配并不是简单的按字符的顺序来的,对于这种简单的程序这样排列不难理解,对于大的程序,变量名不是单一字符的内存分配并不是这样。你可以去实验。
这是一个编译的内存分配,你看看。
  D:000AH         PUBLIC        Sec_Count
  D:000CH         PUBLIC        jaA
  D:000DH         PUBLIC        RealTimeFlow
  D:000EH         PUBLIC        aas
  D:000FH         PUBLIC        accFlow
  D:0011H         PUBLIC        Flowrate
  D:0012H         PUBLIC        c
  D:0013H         PUBLIC        d
  D:0014H         PUBLIC        e
  D:0015H         PUBLIC        f
  D:0016H         PUBLIC        g
  D:0017H         PUBLIC        h
  D:0018H         PUBLIC        i
  D:0019H         PUBLIC        b321
ID:57657 发表于 2021-6-5 16:05
liuzx66 发表于 2021-6-5 11:41
请举例说明,不要误导

定义的变量:

Keil为变量分配的内存地址:






ID:160500 发表于 2021-6-5 11:41
npn 发表于 2021-6-4 22:27
Keil编译时会将变量名进行字符串排序,小的会被分配到低地址,而不是行靠前的变量分配到低地址,把变量l改 ...

请举例说明,不要误导
ID:213173 发表于 2021-6-5 10:47

评分

参与人数 1黑币 +6 收起 理由
老董 + 6 很给力!

查看全部评分

ID:57657 发表于 2021-6-4 22:27
Keil编译时会将变量名进行字符串排序,小的会被分配到低地址,而不是行靠前的变量分配到低地址,把变量l改成h,就分配到其他地址去了。
再加上数组越界就会破坏其他变量,导致程序不能正常运行。
编译后会生成一个M51格式的文件,什么数组、变量分配到什么地址,可以用记事本打开查看。
ID:275826 发表于 2021-6-4 20:24
因为time[6]定义太小

评分

参与人数 1黑币 +6 收起 理由
老董 + 6 很给力!

查看全部评分

ID:867005 发表于 2021-6-4 17:12
可以看一下,是不是定义出现问题
ID:298123 发表于 2021-6-4 16:21
time[6]定义太小,数组访问越界了,误修改变量值了

评分

参与人数 1黑币 +6 收起 理由
老董 + 6 很给力!

查看全部评分

ID:928028 发表于 2021-6-4 16:19
可能h这个变量重复定义了,或者后面码代码的时候没有按照定义的变量来不小心打错了,可以仔细再检查一下,最后我建议楼主以后定义变量的时候尽量用多个字母定义,不行就用全拼嘛,这样不容易搞混。
ID:858964 发表于 2021-6-4 15:52
crrr 发表于 2021-6-4 15:42
楼主会不会是重复定义了

亦有此疑问。
ID:883031 发表于 2021-6-4 15:51
你的程序变量定义时,有个全局变量i,在函数中有定义了一个局部变量i,还有形参也用有i,太乱了,会出问题的。
ID:160500 发表于 2021-6-4 15:49
变量名简单或者复杂,对于编译器来说,都是一样的。编译器不会对此有歧视
ID:160500 发表于 2021-6-4 15:44
明显的time数组定义的小了

评分

参与人数 1黑币 +6 收起 理由
老董 + 6 很给力!

查看全部评分

ID:918728 发表于 2021-6-4 15:42
楼主会不会是重复定义了
ID:858964 发表于 2021-6-4 15:37
老董 发表于 2021-6-4 14:16
我还是个菜鸟 是不是变量名取得太简单了 把KEIL 弄蒙了

楼主修改变量名时,是否将数字 1小 误作小写字母 i?

建议试试将变 量名改为大写字母 L
ID:769980 发表于 2021-6-4 15:35
你试一下,每个变量定义时顺便数值 =0;看会不会正常
ID:160500 发表于 2021-6-4 15:34
改变变量名不会这样,一定有其它的问题你没找到。
ID:849913 发表于 2021-6-4 14:16
我还是个菜鸟 是不是变量名取得太简单了 把KEIL 弄蒙了
ID:236035 发表于 2021-6-4 14:04
仅从贴出来的程序部分,看不出问题。
但值得吐槽的是你这变量名取得很不好。
ID:849913 发表于 2021-6-4 13:41
最后两位显示其实不是99  是我想快速看到运行结果把时间调快了1000倍产生的快门暂留

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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