第八周任务
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本周任务
一、阅读并运行下列程序,注意字符数组和字符指针的用法.
#include
int main()
{ char *str =“I love China!”;
char string[]=“I love China!”;
printf(“%s\n”,string);
printf(“%c\n”,string[7]);
printf(“%s\n”,str);
str=”I am a student.”;
printf(“%s\n”,s tr);
/*
string=”I am a student.”;//这样可以吗?
printf(“%s\n”,string);
*/
return 0;
}
例8.18 将字符串a复制为字符串b,然后输出字符串b。
方法一:数组元素实现
#include
int main()
{ char a[ ]=“I am a student.”,b[20]; 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");
return 0;
}
方法二:用指针变量实现
#include
int main()
{char a[]="I am a boy.",b[20],*p1,*p2;
p1=a; p2=b;
for( ; *p1!=…\0‟; p1++,p2++)
*p2=*p1;
*p2=…\0‟;
printf(“string a is:%s\n”,a);
printf(“string b is:%s\n”,b);
return 0;
}
例8.20 用函数调用实现字符串的复制。方法一:用字符数组名作为函数参数void copy_string(char from[], char to[]) { int i=0;
while(from[i]!='\0')
{ to[i]=from[i];
i++;
}
to[i]='\0';
}
#include
int main()
{ char a[]="I am a teacher.";
char b[]="you are a student.";
printf(“a=%s\nb=%s\n",a,b);
printf("copy string a to string b:\n"); copy_string(a,b);
printf(“a=%s\nb=%s\n",a,b);
return 0;
}
方法二:用字符型指针变量作实参
#include
int main()
{void copy_string(char from[], char to[]); char a[]=“I am a teacher.”;
char b[]=“you are a student.”;
char *from=a,*to=b;
printf(“a=%s\nb=%s\n",a,b);
printf("\ncopy string a to string b:\n"); copy_string(from,to);
printf(“a=%s\nb=%s\n",a,b);
return 0;
}
方法三:用字符指针变量作形参和实参void copy_string(char *from, char *to)
{ for( ;*from!='\0'; from++,to++)
{ *to=*from; }
*to='\0';
}
函数体有多种简化写法,请见主教材
字符指针变量和字符数组注意事项
(1)字符数组由若干个元素组成,存放每个字符,而字符指针变量中存放的是地址(字符串
第1个字符的地址)。
(2)赋值方式。可以对字符指针变量赋值,但不能对数组名赋值。
char *a; a=”I love China!”; 对
char str[14];str[0]=‟I‟; 对
char str[14]; str=”I love China!”; 错
(3)初始化的含义
char *a=”I love China!”;与char *a; a=”I love China!”;等价
char str[14]= ”I love China!”;与
char str[14]; str[]=”I love China!”; 不等价
(4)存储单元的内容
char *a; scnaf(“%s”,a); 错
char *a,str[10];
a=str;
scanf (“%s”,a); 对
(5)字符数组中各元素的值是可以改变的,但字符指针变量指向的字符串常量中的内容是不
可以被取代的。
char a[]=”House”,*b=” House”;
a[2]=‟r‟; 对
char a[]=”House”,*b=”House”;
b[2]=‟r‟; 错
(6)用指针变量指向一个格式字符串
char *format;
format=”a=%d,b=%f\n”;
printf(format,a,b);
相当于
printf(“a=%d,b=%f\n”,a,b);
练习
一、选择
1.有以下定义
char a[10],*b=a;
不能给数组a输入字符串的语句是()
A)gets(a) B)gets(a[0]) C)gets(&a[0]); D)gets(b);
2.下面程序段的运行结果是_________.
char *s="abcde";