在c语言中,引号分为单引号和双引号。双引号里面的是字符串,而单引号里面代表字符。单引号和双引号的区别:
1)单引号引起的一个字符代表一个整数,整数值对应于该字符在ASCII字符集中的序列值;双引号引起的都是字符串,哪怕只有一个字符也是字符串,双引号引起的一个字符代表一个指向无名数组起始字符的指针。
比如: ‘.’代表十进制46,十六进制0x2e;
而”.”代表指向起始字符为”.”的某数组的指针;
2)大小不同
单引号引起的一个字符大小就是一个字节;
双引号引起的一个字符大小是两个字节,因为双引号引起的字符串会在字符串的末尾添加一个0x00作为字符串的结束标识。
在C语言中,可以用两种方法访问一个字符串。
1)用字符数组存放一个字符串,然后输出该字符串
char string[]=”I love China!”;
说明:和前面介绍的数组属性一样,string是数组名,它代表字符数组的首地址。
2)用字符串指针指向一个字符串
char *string =”goodday”
字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。对指向字符变量的指针变量应赋予该字符变量的地址。如
char c, *p=&c;
表示p是一个指向字符变量c的指针变量。
而:
char *s = “C language”;
则表示s是一个指向字符串的指针变量。把字符串的首地址赋予s
上例中,首先定义string是一个字符指针变量,然后把字符串的首地址赋予string(应写出整个字符串,以便编译系统把该串装入连续的一块内存单元),并把首地址送入string. 程序中的:
char *ps=”C langage”;
等效于:
char *ps;
ps=”C Language”;
在打印字符的时候,为什么是mystring而不是*mystring,mystring不是表示一个地址吗?
这个就涉及到%s的用法了。%s要求输入一个指针,或数组名,表示的是一个地址;如果换成printf(%d%c)等等,就需要使用指针指向的变量了。
/*目的:用两种方式来访问字符串
1. 数组的形式 char string[]="Hello, world!"
2. 字符指针的形式 char *string="hello, world!"
*/
#include "stdio.h"
char mystring1[] = "Hello,world!";
char *mystring2 = "hello, world!";
void main(void)
{
printf("%s\n",mystring2);
printf("%s\n",mystring1);
system("pause");
}
现在来看看如何在单片机编程中使用。前面我们在做LCD1602的实验中,实现了单个字符写入1602中,那么如何写一个字符串呢?这里我们使用指针变量作为函数参数,把要写入的字符串地址传递给函数,然后通过write_data()函数一个一个写入。
void write_string(unsigned char *p)
{
write_data(*p);
}
|