指針與字符串實例練習
阿新 • • 發佈:2017-05-20
oid 字節 初始化 目的 class 變量 style 長度 字符型
在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.指針變量的值是可以改變的,但數組名代表數組首元素的地址,是個固定值,不能改變。
指針與字符串實例練習