char* getmonth(int n) { char* month[12] = { ... }利用指針數組儲存每月份的英文名 if(n爲1到12月份) 返回對應月份地址month[n-1]//需注意的是這裏的下標應該是n-1,而不是n else 返回空指針 }
知識點://該題知識點較簡單,但也最爲基礎經典 該題反映瞭如何使用指針數組來記錄多個字符串 char* month[12] = { ... }; 在主函數中,記錄多個字符串也能夠利用二維數組定義,如: char month[12][20];//12個月份,每一個英文字符串最多20個字節 總結: 一般,要記錄多個字符串時,利用二維數組和指針數組都可。 比較:利用指針數組的好處是不用考慮每一個字符串的長度,而二維數組則一一對應更爲直觀好理解 須要注意的是!** 該題是函數接口,所以應當返回有效的指針地址,所以只能利用指針數組來作,不能直接用二維數組定義** ** 拓展**//老師上課拓展的筆記 返回指針的函數通常都返回** 全局數據對象** ,** 堆區的指針** ,** 指向字符串常量的地址** ,** 主調函數中數據對象的地址** 或** 指針數組** 。 所以若必定要使用二維數組,應當以下修改: static char month[12][20];//
該題較基礎簡單,因此PTA上一次就過,但在實際操做中,因爲是第一個練習的題目,仍有許多值得學習、值得回憶的地方。c++
1.一開始想要利用指針數組編寫。然而在實際編寫過程當中老是有紅色的波浪線,也就是語法錯誤。因而我只好換種寫法,利用二維數組編寫,在編寫過程當中顯然語法是沒錯的,但運行測試時倒是一大堆奇怪的字符,這讓我百思不得其解。數組
最後上課時老師也進行了解釋,因爲該題作的是函數接口,在函數中定義的只是局部變量,當返回時也已經消亡了,因此纔會出現一大堆奇怪的字符,由於地址已經不知道指到哪去了。
書本上預習時也有讀到相關內容,可是在真正應用中仍是無法立刻反應過來,而通過這題,對在分裝函數中返回有效的指針地址有了更多的理解。
同時課堂上也拓展了在返回指針的函數中哪些能返回,以及該題目利用二維數組的方法(總結在上部分的知識點中)函數
2.最終我是利用指針數組寫的,但在編寫過程當中,老是出現紅色波浪線(說明語法錯誤)。所以上百度搜索。
最終解決辦法是:在VS編譯器 屬性-> c/c++ -> 語言 -> 修改符合模式學習
char* Search(char* s, char* t) { char* ps;用來保存s串中出現相同的第一個字符的地址 char* pt = t;用來保存t串的首地址 while (*s!=0) //遍歷s字符串 { if (s中的某個字符與t串第一個字符相同) { ps = s; 記錄出現相同第一個字符的地址 while 遍歷t串 { if (比較字符若不一樣) break; else 地址自增,繼續比較 } if (若t串所有遍歷) 則說明其後的字符也都相同,返回地址ps 若進行到這步則說明不一樣,因爲比較過程當中指針移動了,所以將s恢復到已經比較的位置,t恢復到首地址,以便下次比較。 即 s = ps;t=pt } s++; } if(若s串所有遍歷) 則說明s中找不到t串,返回空指針 }