首页 > 代码库 > 指针与字符串实例练习

指针与字符串实例练习

在C语言中,字符串是存放在字符数组中的,字符串的引用如下:

char string[] ="I love China!";//定义字符数组string

printf("%s\n",string);//输出整个字符串

printf("%c\n",string[7]);//输出第七个元素

该字符串长度是14,最后一个字节存放字符串结束符‘\0‘。

例1:通过字符指针变量输出一个字符串。

1 int main()
2 {
3     char *string="I love China!";
4     printf("%s\n",string);
5     return 0;
6 }

定义一个char*变量,即字符型指针变量string,用字符串常量"I love China!"初始化,把字符串的第一个元素的地址赋给指针变量string,使string指向字符串的第一个字符。

%s使输出字符串格式符,系统会输出string指向的第一个字符,然后自动使string+1,指向下一个字符,直到‘\0‘为止。

例2:将字符串a复制为字符串b,然后输出字符串b。

 1 int main()
 2 {
 3     char a[]="I am student.",b[20],*p1,*p2;
 4     p1=a;p2=b;//指向数组中第一个元素 
 5     for(;*p1!=‘\0‘;p1++,p2++)
 6        *p2=*p1;
 7     *p2=\0;
 8     printf("string a is:%s\n",a);
 9     printf("string b is:%s\n",b);
10     return 0; 
11 }

例3:用函数调用实现字符串的复制。

(1).用字符数组名作为函数参数。

 1 int main()
 2 {
 3     void copy(char from[],char to[]);
 4     char a[]="I am a student.";
 5     char b[]="You are a student.";
 6     printf("string a=%s\nstring b=%s\n",a,b);
 7     printf("copy string a to string b:\n");
 8     copy(a,b);//用字符数组名作为实参
 9     printf("\nstring a=%s\nstring b=%s\n",a,b);
10     return 0; 
11 }
12 void copy(char from[],char to[])//形参为字符数组 
13 {
14     int i=0;
15     while(from[i]!=\0)
16     {
17         to[i]=from[i];
18         i++;
19     }
20     to[i]=\0; 
21 }

(2).用字符型指针变量作实参。

 1 int main()
 2 {
 3     void copy(char from[],char to[]);
 4     char a[]="I am a student.";
 5     char b[]="You are a student.";
 6     char *from=a,*to=b;//指针变量指向数组首元素 
 7     printf("string a=%s\nstring b=%s\n",a,b);
 8     printf("copy string a to string b:\n");
 9     copy(from,to);//用字符指针变量作实参 
10     printf("\nstring a=%s\nstring b=%s\n",a,b);
11     return 0; 
12 }
13 void copy(char from[],char to[])//形参为字符数组 
14 {
15     int i=0;
16     while(from[i]!=\0)
17     {
18         to[i]=from[i];
19         i++;
20     }
21     to[i]=\0; 
22 }

(3).用字符指针变量作形参和实参。

 1 int main()
 2 {
 3     void copy(char *from,char *to);
 4     char *a="I am a student.";
 5     char b[]="You are a student.";
 6     char *p=b;
 7     printf("string a=%s\nstring b=%s\n",a,b);
 8     printf("copy string a to string b:\n");
 9     copy(a,p);//用字符指针变量作实参 
10     printf("\nstring a=%s\nstring b=%s\n",a,b);
11     return 0; 
12 }
13 void copy(char *from,char *to)//形参为字符指针变量 
14 {
15     for(;*from!=‘\0‘;from++,to++)
16        *to=*from; 
17     *to=‘\0‘; 
18 } 

上述的三个程序区别实参和形参的不同,都达到了复制字符串的目的,仔细观察三个程序不同的地方,总结字符指针变量和字符数组的区别如下:

   1.字符数组中存放的是元素,而字符指针存放的是地址。

   2.可以对字符指针变量赋值,但不能对数组名赋值。

     char *a;  a="I love China!";//正确的

     char string[14];  string="I love China!";//错误的

   3.初始化含义不同。

      char *a="I love China!";//把字符串第一个元素的地址赋给a

      char string[]="I love China!";//把字符串赋给数组中的各个元素

   4.指针变量的值是可以改变的,但数组名代表数组首元素的地址,是个固定值,不能改变。

 

指针与字符串实例练习