在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.指针变量的值是可以改变的,但数组名代表数组首元素的地址,是个固定值,不能改变。
时间: 2024-10-26 15:42:47