C語言經典試題--指針


分享一道C語言的經典的題目.題目要求如下:

  利用字符指針實現字符串1“I Love China”與字符串2“So do I”的輸出。然后利用字符指針將字符串2的內容復制到字符串1中,然后輸出字符串1.

乍一看,沒什么大的問題,用一個strcpy()函數直接就可以解決掉,但是仔細讀題,指針!當時就沒怎么學懂,所以在這,記錄一下血與淚的辛酸史.

 

一、問題思路與代碼

  先看下面一段代碼:

1 char string1[50]="I Love China."; 2     char string2[50]="So do I."; 3     char * p1,* p2; 4     p1=string1; 5     p2=string2;

很簡單的兩句話,初始化指針為兩個字符串的首地址.

  接着,嘗試把字符串輸出.

1 for(p1;*p1!=0;p1++) 2  { 3         printf("%c",*p1); 4     }

  string2原理相同,到這的話還是很簡單的嘛.

  接下來,我們需要將字符串2的內容復制到字符串1中,啊哈,這才是重頭戲.

  首先,我們一定要初始化指針,否則就是在原先的指針之后進行操作,然后進行如下操作:

1 for(;*p2!='\0';p2++,p1++) 2     {//將string2賦值到string1並將其覆蓋 
3         *p1=*p2; 4  } 5     *p1='\0';

  通過判斷是p2的地址否到達字符串的最后,來將他們的指針的值進行交換,輸出string1.好,問題解決.

 

二、思考

  解決上一個問題之后,我們可以在這個問題上升升級,問題如果變成這樣呢?

    利用字符指針實現字符串1“I Love China”與字符串2“So do I”的輸出。然后利用字符指針將字符串2的內容連接到字符串1中,然后輸出字符串1.

  同樣,在使用過指正之后應該將指針初始化,這是一個良好的習慣.

  然后,定義一個空指針p,使他初始化為string1(因為在開始初始化的時候,我們使用*p1來儲存string1中的值,所以這時候 1 for(p=p1;*p!='\0';p++); 就在通過指針間的作用將p進行初始化,這里我是為了使p指針移動到p1后的位置).

1 char *p; 2 int i; 3 for(p=p1;*p!='\0';p++); 4 for(i=0;*(p2+i)!='\0';i++,p++) 5  { 6 *p=*(p2+i); 7  } 8 *p='\0';   

  隨后,將p2的指針值添加到p后,這樣就完成了.  


免責聲明!

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



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