1. 程式人生 > >指針與字符串實例練習

指針與字符串實例練習

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.指針變量的值是可以改變的,但數組名代表數組首元素的地址,是個固定值,不能改變。

指針與字符串實例練習