找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1393|回复: 11
打印 上一主题 下一主题
收起左侧

请教一下C语言数组的使用问题

[复制链接]
跳转到指定楼层
楼主
5黑币
我在用数组进行控制打印机,但是我想用另一个数组中元素来当自模数组的下标,现在测试只要是第一个变量取数组里的元素就会出现异常,
想请教一下:数组的下标可以是另外一个数组的元素吗(16进制元素unsigned char类型的)。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:313048 发表于 2021-11-8 16:58 | 只看该作者
是可以这样操作的,但是并不建议你这样使用,因为这样容易出现数组越界,如果不注意使用的话。
回复

使用道具 举报

板凳
ID:883242 发表于 2021-11-8 19:14 | 只看该作者
下标必须可以是其他数组元素,贴出错代码出来吧。
回复

使用道具 举报

地板
ID:417328 发表于 2021-11-9 08:36 | 只看该作者
Hephaestus 发表于 2021-11-8 19:14
下标必须可以是其他数组元素,贴出错代码出来吧。

这是图片

51hei图片20211108150025.png (28.86 KB, 下载次数: 21)

字模数组

字模数组

51hei图片20211108145806.png (9.72 KB, 下载次数: 33)

程序两个数组

程序两个数组

51hei图片20211108145954.png (140.49 KB, 下载次数: 19)

打印出来的

打印出来的
回复

使用道具 举报

5#
ID:592807 发表于 2021-11-9 09:03 | 只看该作者

2012里面为啥第2个数字2没事,第一个就有事?
回复

使用道具 举报

6#
ID:313048 发表于 2021-11-9 10:59 | 只看该作者

那个异常的数组里面是print1[0]是你复制的时候打错了吧?还是说本身复制过来就这样。不应该是print1[1]吗?
首先你得确定你的print1[]这个数组里面的数字是没有问题的,如果是没错的话那就不应该有问题,因为数组是可以这样操作的,如果出来不对,肯定是你有程序对这个print1[]数组的操作产生的数据不对。
从你打印出来的那个2来看,很明显是取模的值向后移了,并不是从头开始读取,那么就应该是你的print1[]这个值取大了,为什么变大了肯定是你程序某个地方把值给改变了。
回复

使用道具 举报

7#
ID:417328 发表于 2021-11-9 15:17 | 只看该作者
就是只要FontTable1206[]数组下标取另外一个数组的16进制元素就会出现乱码,是不是不能这样取。

51hei图片20211109150631.png (48.01 KB, 下载次数: 29)

这是我程序的三行代码

这是我程序的三行代码

51hei图片20211109151449.png (587.63 KB, 下载次数: 32)

对应数组打印的

对应数组打印的
回复

使用道具 举报

8#
ID:624769 发表于 2021-11-9 15:41 | 只看该作者

你把,你在 地板  发的 这两条代码的   正常的数组,出现异常的数组, Ctrl + F5   Debug  之后,看看出来的汇编代码,到底有什么差别,可以方便找到出错原因。
回复

使用道具 举报

9#
ID:417328 发表于 2021-11-9 16:24 | 只看该作者
188610329 发表于 2021-11-9 15:41
你把,你在 地板  发的 这两条代码的   正常的数组,出现异常的数组, Ctrl + F5   Debug  之后,看看出 ...

大佬看一下

51hei图片20211109162158.png (159.39 KB, 下载次数: 32)

51hei图片20211109162158.png

51hei图片20211109162313.png (158.43 KB, 下载次数: 26)

51hei图片20211109162313.png
回复

使用道具 举报

10#
ID:417328 发表于 2021-11-9 16:33 | 只看该作者
我想问一下:unsigned char zifu[16]={0X30,0X31,0X32,0X33,0X34,0X35,0X36,0X37,0X38,0X39,0X41,0X42,0X43,0X44,0X45};
这个数组的元素,如果要为A[]数组的下标。是不是得把zifu[]数组的元素变为整数才可以,刚才试了试把zifu[0]赋值给(int)SHU。放进去也是乱码;
回复

使用道具 举报

11#
ID:313048 发表于 2021-11-9 16:56 | 只看该作者
513489465 发表于 2021-11-9 16:33
我想问一下:unsigned char zifu[16]={0X30,0X31,0X32,0X33,0X34,0X35,0X36,0X37,0X38,0X39,0X41,0X42,0X43 ...

你为啥一定要在【】里面去运算,你完全可以在外面先运算之后再作为下标使用啊,你调试肯定要确定每一步都没有问题才对啊,你这只看最后结果去确定哪里出错是什么个操作?  
基本的调试都不会吗?
unsigned char  temp;
temp = (zifu-0x20)*12+N;  你先确定这个temp对不对你再去考虑显示的那个取值啥的问题不行?
非得一次性全部搞出来,没有中间过程,觉得这样写很顺眼?
基本的调试都不懂,明明能仿真  还问这么简单的问题。
回复

使用道具 举报

12#
ID:624769 发表于 2021-11-9 21:05 | 只看该作者


试一下效果
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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