标题:
麻烦大佬解答个C语言指针问题
[打印本页]
作者:
mtt661
时间:
2023-7-16 22:48
标题:
麻烦大佬解答个C语言指针问题
今天边学习边抄,自己修改了一个C语言函数,有个疑问,这个效果是在lcd指定的行,列显示字符,
比如
void display_charE8x16(0,0,“abc”) 就会在lcd 0行,0列显示个abc;
有个问题想不明白,为啥必须加上while(*dp)循环,而且下面dp都++了,为啥循环了abc三次后就退出循环了?这个时候*dp等于0了?
不加while循环,只能显示a,也就是字符串第一个。
void display_charE8x16(unsigned char y,unsigned char x,unsigned char *dp)
{
unsigned char i,j,z,mono_data;
while(*dp) //
{
j = *dp - 0x20;//获取当前ascii字符减32后的值
for(i=0;i<16;i++)
{
set_lcd_address(y+i,x); //定位起始字符在屏幕的位置。
mono_data=ASCII16[j*16+i]; //j*16是定位ascii字符在ASCII16[]数组中的起始位置。
for(z=3;z>0;z--)
{
data16bit(mono_data>>(z*3-3)); //整体分别移位6 3 0 共移动3次 取移动后最后三位 3bit
}
}
dp++;
x+=3; //每次列加3
}
}
复制代码
作者:
glinfei
时间:
2023-7-17 08:25
没看全程序,但一般dp应该指向的是一个字符串吧?一个字符串一般是以\0结束的,所以查到\0就退出循环。
作者:
123156fsadf
时间:
2023-7-17 08:39
“abc”是一个字符串,C语言中,字符串结尾会跟一个0x00,所以显示到'c'的时候,再加1,就变成了0x00,也就跳出while循环了
作者:
FrankJi
时间:
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,则退出循环。
作者:
榆木稚
时间:
2023-7-17 12:49
“abc”是一个字符串,C语言中,字符串结尾会跟一个0x00,所以显示到'c'的时候,再加1,就变成了0x00,也就跳出while循环了
作者:
yzwzfyz
时间:
2023-7-17 15:46
想想显示语句执行一次,可以向显示屏上送几个字符呢?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1