一、字符指针
1、 定义指向字符串的的指针变量
char *p=”China”;
注意:这里没有定义字符串数组,但字符串在内存中还是以数组形式存放,占有一片连续的内存,以‘\0’结束;对于赋值只是把字符串的首地址给p,而不是把字符串给p,p是一个指针变量,它只能存放一个地址!
问题提出:将字符串用指针逐个输出?
主函数如下:
void main(void)
{
char *p=”China”;
for(;*p!=’\0’;p++)
{
printf(“%c”,*p);
}
}
2、 字符指针变量与字符数组的区别
char s[]=”C Language”; char *p =” C Language”;
a) 存储方式不同,s存放的是字符串的字符和’\0’,p存放的是字符串的首地址
b) s 是一个数组名,它虽然能代表首地址,但它是个常量,不能s++运算;而p是个指针变量,是可以p++运算的!
c) 赋值方法不同,数组初始化后必须赋值,不能初始化后再赋值,比如char a[10]; a[10]="hello"或a=”hello”;这样是错误的!a[10]表示数组第10个数据,a是地址常数更不能改变!而指针就可以如下操作:char *p1,*p2=”china”;p2=”china”;
d) 定义s内存会分配一片连续的的存储单元,而只给p一个存储单元!
二、字符串指针作函数参数
问题提出:实现字符串赋值?
第一步:主函数
void main(void)
{
char *a=Cat”;
char *b=”Tiger”;
copy(a,b);
}
第二步:我们需要利用指针变量接收2个数组的首地址,所以函数如下:
void copy(char *from,char *to)
{
for(;*from!=’\0’;from++,to++)
{
*to =*from;
}
*to=’\0’;
}
这样就实现了字符串从a到b的赋值!
最终结果如下: