【论指针(5)】指针与字符串


一、字符指针

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的赋值!

最终结果如下:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值