指針與字符串實例練習


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM