打印
[STM32]

有人可以解读下这段代码吗,看不懂

[复制链接]
763|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keen123|  楼主 | 2015-4-10 21:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是例程里的一段代码,例程主要意思是将数据存入存储芯片AT2402,再从存储芯片AT2402读出数据。我想知道下面这段代码是怎么走的,看不懂for循环的内容,学习中,求教。
unsigned char Count1=231;
unsigned long D[16];
unsigned char i;
unsigned char pDat[8];
if(1)   
           {
              D[14]= Count1;
                  
                 for (i=0; i<4; i++)
             {
                  pDat[i*2+0]=D[14+i];
                   pDat[i*2+1]=D[14+i]>>8;
                 }

相关帖子

沙发
yangwenguan| | 2015-4-11 08:17 | 只看该作者
好好学习一下C, 先放下, 慢慢来, 别着急

使用特权

评论回复
板凳
keen123|  楼主 | 2015-4-11 20:05 | 只看该作者
不好意思,是我的提问方式有问题,问题描述太简单了。,现在去看我的提问,觉得郁闷,没问到关键问题,怪不得没人愿意解答。现在问题已经解决了,当然,自己还是要对C语言深入学习。我想提问也是学习的方法。

使用特权

评论回复
地板
keen123|  楼主 | 2015-4-11 20:11 | 只看该作者
yangwenguan 发表于 2015-4-11 08:17
好好学习一下C, 先放下, 慢慢来, 别着急

其实我想问的是,我声明数组D[16],已经限制了数组D[16]的长度,但是按照接下来的for循环操作,数组D会超出我所声明的长度,会有D[16],D[17](最高应该是D【15】就没了)出现,应该是要报错的,但是不知道为什么keil4编译可以通过,所以我想知道,这程序是怎么运行的。才会有如上郁闷的提问方式,问得有些急、

使用特权

评论回复
5
keen123|  楼主 | 2015-4-11 20:30 | 只看该作者
网上查过资料后,了解到这个问题是,数组越界。了解到C语言不对数组越界进行判断,而出现数组越界在C语言上是允许的,C语言会在数组D的地址生长方向依次分配内存给D[16]D[17]的,但是这两处的内存是“未定义的”,不属于数组D的,内容是未知的,存在风险,运气好,这两处的内存已经分配给其他变量,有值,可以访问,编译允许通过,倘若运气不好,这两处的内存值被更改容易会导致程序运行异常,编译不通过。
以上代码,要么是逻辑有问题,要么是代码编写者有自己的想法。不知道我的理解是否正确

使用特权

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

本版积分规则

3

主题

16

帖子

0

粉丝