字符串与指针

/*定义一个字符数组,对它初始化,然后输出该字符串*/

#include<stdio.h>

void main()
{
char string[]="i love you";
printf("%s\n",string);//string 是数组名,它代表字符数组的首地址
printf("%c\n",string[4]);string[4]代表数组中序号为4 的元素
printf("%c\",*(string+4));

}


/*定义字符串指针*/
#include<stdio.h>
void main()
{
//char *string="i love you";

char *string;

string="i love you"; //*string = "i love you";是错的
printf("%s\n",string);
}

备注:%s是指以字符串的格式输出,在输出项中给出字符指针变量名string,则系统先输出他所指向的一个字符数据,然后自动使string+1,知道遇到'\0'结束,字符串的最后会自动加'\0';注意:对于int a[10] ...printf("%d\n",i);是不行的

/*复制a到b*/
#include<stdio.h>
void main()
{
char a[]="i am a boy", b[20];//b的空间要大于a
int i;
for(i=0;*(a+i)!='\0';i++)//注意和下面红色的差别
*(b+i)=*(a+i);
*(b+i)='\0';
printf("string a is:%s\n",a);
printf("string b is:");
for(i=0;b[i]!='\0';i++)
printf("%c",b[i]);
printf("\n");

}

备注:对于这个程序的主要是对‘\n’的处理

等价的一个linux的


/*用指针变量来处理*/

/*复制a到b*/
#include<stdio.h>
void main()
{
char a[]="i am a boy", b[20],* p1,* p2;
p1=a;
p2=b;
int i;
for(;*p1!='\0';p1++,p2++) 

*p2=*p1;
* p2='\0';
printf("string a is:%s\n",a);
printf("string b is:");
for(i=0;b[i]!='\0';i++)
printf("%c",b[i]);
printf("\n");
}

/*形参用字符指针表示*/

#include<stdio.h>
void main()
{
void copy_string(char * from,char * to);
char from[]="i am a teacher";
char to[]="you are a student";
char * a =from, *b=to;
printf("string a =%s\nstring b=%s\n",a,b);
printf("copy string a to string b");
copy_string(a,b);
printf("\string a=%s\nstring b= %s\n",a,b);
}
void copy_string(char * from,char * to)
{
for(; *from!='\n';from++,to++)


* to = *from;
* to ='\n';
 
}

***********************************************************************

对于copy_string函数的简化

***********************************************************************

1 void copy_string(char * from, * to)

{

while((*to=*from)!='\0')

{to++;from++}

2 while((*to++=*from++)!='\0')

3 {

while(*from!='\0');

*to++=*from++;

*to='\0';

}

4 {

while(*from)

{

*to++=*from++;

*to='\0';

}

}

4(简化)while(*to++=*from++)

   while((*to++=*from++)!='\n')

5 for(;*to++=*from++;)

也可以使用指针做变量

void copy_string(char from[],char to[])

{

char *p1,*p2;

p1=from;p2=to;

while((*p2++=*p1++)!='\0')

}

字符指针变量和字符数组

字符指针变量赋值

char *a;

a="ni hao";


char *a="nihao"

字符数组

char a[5]={"nihao"};

错误的赋值: char a[5]; a[]={"nihao"}


char str[10];

scanf("%s",str);

是正确,但是下面的是错误的

char *a;

scanf("%s",a);

原因是对于指针变量a没有分配内存

char *a,str[10];

a=str;

scanf("%s",a);

/*改变指针变量的值*/
#include<stdio.h>
void main()
{
char * a=" i love china!";
a=a+7;
printf("%s\n",a);
printf("%c\n",a);
}


--------------------参考书目《C程序设计》第三版 谭浩强




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值