加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

在应用二维数组时应注意的问题

(2012-09-21 08:49:30)
标签:

杂谈

分类: 嵌入式技术

首先,我定义一个全局变量数组:

volatile INT8U  step_time[9][5] =  {{'0','0','0','9','\0'},
                                    {'0','0','0','9','\0'},
                                    {'0','0','0','9','\0'},
                                    {'0','0','0','9','\0'},
                                    {'0','0','0','9','\0'},
                                    {'0','0','0','9','\0'},
                                    {'0','0','0','9','\0'},
                                    {'0','0','0','9','\0'},
                                    {'0','0','0','9','\0'}};

这里INT8U就是unsigned char。

然后我在另外一个文件中引用了这个数组:

extern INT8U step_time[9][4];

在编译时并任何告警或者错误,但奇怪的问题出现了,我在按下标进行访问此数组时,如tmp=step_time[1][0];tmp中的值却是step_time[0][4]的值,往下依次类推,始终是基于step_time + n*4(n为整数)偏移量进行偏移取值。经过几天的盘查,才发现引用时的一个疏忽,误将“extern INT8U step_time[9][5];”的“5”写成“4”,不过由此明白编译器要引用全局变量,去不判断其携带的参数是否正确。在一个较为复杂的项目中,这样一个小小错误是比较难查的。为此要切记切记!

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有