找回密码
 立即注册

QQ登录

只需一步,快速开始

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

麻烦大佬解答个C语言指针问题

[复制链接]
跳转到指定楼层
楼主
ID:1010435 发表于 2023-7-16 22:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天边学习边抄,自己修改了一个C语言函数,有个疑问,这个效果是在lcd指定的行,列显示字符,
比如void display_charE8x16(0,0,“abc”) 就会在lcd 0行,0列显示个abc;
有个问题想不明白,为啥必须加上while(*dp)循环,而且下面dp都++了,为啥循环了abc三次后就退出循环了?这个时候*dp等于0了?
不加while循环,只能显示a,也就是字符串第一个。
  1. void display_charE8x16(unsigned char y,unsigned char x,unsigned char *dp)
  2. {
  3.         unsigned char i,j,z,mono_data;

  4.         while(*dp)        //
  5.         {
  6.                 j = *dp - 0x20;//获取当前ascii字符减32后的值               
  7.                 for(i=0;i<16;i++)
  8.                 {
  9.                         set_lcd_address(y+i,x);         //定位起始字符在屏幕的位置。
  10.                         mono_data=ASCII16[j*16+i];        //j*16是定位ascii字符在ASCII16[]数组中的起始位置。
  11.                         for(z=3;z>0;z--)        
  12.                         {
  13.                                 data16bit(mono_data>>(z*3-3));                //整体分别移位6 3 0 共移动3次 取移动后最后三位 3bit
  14.                         }
  15.                 }
  16.         dp++;
  17.         x+=3;        //每次列加3        
  18.         }
  19. }
复制代码



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

使用道具 举报

沙发
ID:844772 发表于 2023-7-17 08:25 | 只看该作者
没看全程序,但一般dp应该指向的是一个字符串吧?一个字符串一般是以\0结束的,所以查到\0就退出循环。
回复

使用道具 举报

板凳
ID:744809 发表于 2023-7-17 08:39 | 只看该作者
“abc”是一个字符串,C语言中,字符串结尾会跟一个0x00,所以显示到'c'的时候,再加1,就变成了0x00,也就跳出while循环了
回复

使用道具 举报

地板
ID:1059989 发表于 2023-7-17 09:05 | 只看该作者
dp指向字符串"abc",*dp是取dp指针指向处的值,最开始时dp指向"abc"字符串的开头,所以*dp是a,当dp++后,dp向前移动一个元素,指向"abc"字符串的第二个字符"b",...,依次类推,所以通过一个循环,不断执行dp++,就可以用*dp取得字符串的每一个字符。while(*dp)意思是如果*dp不是0,则执行循环中的语句,如果*dp是0,则退出循环。
回复

使用道具 举报

5#
ID:1088718 发表于 2023-7-17 12:49 | 只看该作者

“abc”是一个字符串,C语言中,字符串结尾会跟一个0x00,所以显示到'c'的时候,再加1,就变成了0x00,也就跳出while循环了
回复

使用道具 举报

6#
ID:123289 发表于 2023-7-17 15:46 | 只看该作者
想想显示语句执行一次,可以向显示屏上送几个字符呢?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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