51单片机C语言数组问题
这是51单片机流水灯的hex数组ucharcodetable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};当程序运行到tabl...
这是51单片机流水灯的hex数组
uchar code table[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
当程序运行到table[9](或者比9大的数时),取值经烧录后验证是0x00;
然而,
这是51单片机的段选Hex码(0~F)
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
当我取到17,18,19时,数码管分别显示对应的HEX为0x78,0x7F和0xE4的码(不是乱码,每次都是对应且确定的)
C语言的定义当取值超过数组个数是,应该是什么情况呢?是默认输出0还是会报错?至少我用keil编译的时候,没有报错. 展开
uchar code table[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
当程序运行到table[9](或者比9大的数时),取值经烧录后验证是0x00;
然而,
这是51单片机的段选Hex码(0~F)
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
当我取到17,18,19时,数码管分别显示对应的HEX为0x78,0x7F和0xE4的码(不是乱码,每次都是对应且确定的)
C语言的定义当取值超过数组个数是,应该是什么情况呢?是默认输出0还是会报错?至少我用keil编译的时候,没有报错. 展开
2个回答
展开全部
值是不确定的,不同的编译器会用不同的值填充未知的内存区域,而且你确实不必在意到底的是什么值,毕竟数组越界本身就不该发生
追问
之所以有这个疑问是因为看到了一个有关蜂鸣器的例程,程序里有一个for循环:
for(i=0;SONG_LONG[i]!=0;i++)
{
STH0=SONG_TONE[i]/256;
STL0=SONG_TONE[i]%256;
TR0=1;
time=SONG_LONG[i]*800;
delay(time);
}
这个程序好像就是认为当i的取值大于数组的元素个数是,会取0而退出for循环,如果是未知不确定的,那就不能控制了
追答
我猜是SONG_LONG数组的唯一一个为0的元素就是最后一个元素吧,否则这种写法是危险的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询