首页 理论教育 C51单片机高效入门:指针、数组和字符串

C51单片机高效入门:指针、数组和字符串

时间:2023-11-17 理论教育 版权反馈
【摘要】:通常把char型指针称为字符串指针或字符指针。计算串长度的函数strlen()是使用字符串指针的一个实例。执行结果:H6e定义字符指针可以直接用字符串作为初始值,来初始化字符指针。向字符指针赋字符串。

C51单片机高效入门:指针、数组和字符串

1.指针数组

用指针和用数组名访问内存的方式几乎完全一样,却又有微妙而重要的差别。指针是地址变量,数组名则是固定的某个地址,是常量。

若定义一个数组:

int a[10];

则在内存中占有从一个基地址开始的一块足够大的连续的空间,以包容a[0],a[1]…,a[9]。基地址(或称为首地址)是a[0]存放的地址。其他依下标顺序排列。

若定义一个指针:

int*p;

则意味着:p=&a[0];即

p指向a[0]

p+1指向a[1]

p+2指向a[2]

p+i=&a[i];

p+i指向a[i](i=0,…,9)

1)在C语言中,数组名本身是指向零号元素的地址常量。因此,p=&a[0]可写成p=a,a当作常量指针,它指向a[0].p=a+i与p=&a[i]等价,故数组名可当指针用,它指向0号元素。

2)若定义p为指针,a为数组名,且p=a,则p+i指向a[i],a+i也指向a[i]。这样,a[i]与*(p+i)或*(a+i)可看成是等价的,可互相替代使用。

注意:

由于a只是数组名,是地址常量,而不是指针变量,所以可以写p=a,但不能写a=p,可以用p++,但不能用a++。

2.字符串指针

在C语言中,可用char型数组来处理字符串,而数组又可用相应数据类型的指针来处理。所以可以用char型指针来处理字符串。通常把char型指针称为字符串指针或字符指针。

【例7-5】计算串长度的函数strlen()是使用字符串指针的一个实例。(www.xing528.com)

执行结果:

H

6

e

定义字符指针可以直接用字符串作为初始值,来初始化字符指针。例如:

这样的赋值并不是将字符串复制到指针中,只是使字符指针指向字符串的首地址。但对于数组操作,例如:

char text[80];

则不可写成:

text=“Hello!”;

因为,此处text是数组名,而不是指针,只能按字符数组初始化操作。即:

static char text[80]={“Hello!”};

当字符串常量作为参数(实参)传递给函数时,实际传递的是指向该字符串的指针,并未进行字符串复制。

【例7-6】向字符指针赋字符串。

执行结果:

此例中字符串是逐个字符输出,也可以字符指针为参量,作字符输出,例如:

【例7-7】以字符指针为参数来调用串比较函数strcomp()。

s和t初值已由实参传递过来了,所以for语句的第一个表达式为空语句。用指针处理字符串的复制,比用数组处理更精练,例如:

如果用数组处理则要复杂些,例如:

直接演化出指针处理,即:

优化后便是如前所示的指针处理方法的程序。其中,也使用了空语句(;),而且不必进行与‘\0’的比较。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈