在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.指针变量的值是可以改变的,但数组名代表数组首元素的地址,是个固定值,不能改变。
来源:https://www.cnblogs.com/wxywxy/p/6883193.html