c语言文件调用指针数组,指向数组的指针

在串口章节和液晶屏章节的部分代码中总是看到“  *str!='\0'  ”和“  *str++  ”却一时难以理解意思,本节我们将简要讲解这两部分代码的含义,但前提需要大家有对指针方面的知识基础,建议先了解《手把手教你学51单片机》文档12.1节知识内容先。

1.代码解析

我们先定义一个数组“u8 LEDSET[4]={0x7E,0xBD,0xDB,0xE7};”

假设这四个元素的内存排布如下,5,6,7,8代表的是指向元素的指针。

每个数组初始化之后都会在最后那个元素内存的下一个内存分配有一个结束符的数据,“‘\0’”的ASCII码值就是0。

87e3592692199a9d09bf2aa3da673738.png

接着我们先把下面代码下载进开发板中观察现象#include 

#include //详见第六章第8讲

void LED_task(u8 *str)

{

while(*str != '\0')//连续发送字符串数据,直到检测到结束符

{

P0=*str++;

delay_ms(1000);

}

}

void main()

{

u8 LEDSET[4]={0x7E,0xBD,0xDB,0xE7};

LED_Init();//初始化LED硬件模块

LED_task(LEDSET);

while(1);

}

主函数里我们只需关注“LED_task(LEDSET);”,传入的参数是指针类型,LEDSET就是指向数组第一个元素的指针,也就是指向的是0x7E,指针是5。

在“while(*str != '\0')”里,由于传入的指针里面的值不是结束符,所以可以进入循环体,此时执行“P0=*str++;”。

“*str++;”的意思是,先把0x7E这个值赋给P0先,然后指针加1,此时的指针就是6了。

那么就有“P0=0x7E;”延时一秒之后,重新判断“while(*str != '\0')”,显然指针为6的内存里也不是结束符,而是0xBD,所以执行“P0=0xBD;”延时一秒。

后面再执行两次赋值给P0为0xDB,0xE7之后,由于此时指针加1之后指向了0x00,也就是结束符,不满足了“while(*str != '\0')”,该函数就执行完了。于是就到执行主函数里的“while(1);”,后面我们看到开发板的实验现象就是中间两盏灯一直保持常亮,因为已经执行完“LED_task(LEDSET);”了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值