標籤:
相對於基礎開始比較薄弱,比較坑的是VC裡面直接#include<iostream.h>到VS裡面需要換成#include<iostream> using namespace std;VS2010以後的都刪除了所有非標準庫,保留了C++標準庫,iostream.h是以前舊版的庫,VS2010之後的支援新版的標準iostream;VS2013沒有專門給C程式的,可以選C++,然後建立新項目,並把項目的尾碼從.cpp改為.c,即可開始編寫.
今天做了個關於數組的ppt,在做ppt的過程中發現自己多年不碰的C++變的很生疏,特別是對於strcmp函數,猛地以為就是比較兩個字串的大小,以為是長度大小,後來寫了個程式試了下不是我理所當然的,而是比較字串的大小,與長度無關。
strcmp函數比較結果是這樣規定的:
①字串1小於字串2,strcmp函數返回一個負值;
②字串1等於字串2,strcmp函數返回零;
③字串1大於字串2,strcmp函數返回一個正值;
初看定義以為理所當然的一個一個字串,後來發現實際上,字串的比較是比較字串中各對字元的ASCII碼。首先比較兩個串的第一個字元,若不相等,則停止比較並得出大於或小於的結果;如果相等就接著 比較第二個字元然後第三個字元等等。如果兩上字串前面的字元一直相等,像"disk"和"disks" 那樣, 前四個字元都一樣, 然後比較第 五個字元, 前一個字串"disk"只剩下結束符‘/0‘,後一個字串"disks"剩下‘s‘,‘/0‘的ASCII碼小於‘s‘的ASCII 碼,所以得出了結果。因此無論兩個字串是什麼樣,strcmp函數最多比較到其中一個字串遇到結束符‘/0‘為止,就能得出結果。
特別注意:字串是數群組類型而非簡單類型,不能用關係運算進行大小比較。
if("ABC">"DEF") /*錯誤的字串比較*/
if(strcmp("ABC","DEF") /*正確的字串比較*/
當涉及到二維數組的時候,我們有時候會將二維數組作為一個函數的參數,如果二維數組的行列不確定時,會出現編譯錯誤,比如int maximun(int grade[][],int pupils,int tests) 就會出現error C2087:’<Unknown>‘:missing subscript.出現這個問題是因為我們如果想把二維數組作為函數的參數,那麼二維數組的列值至少是確定的。正確的寫法應該是int maximun(int grade[][4],int pupils,int tests);
如果想用指標來表示int maximun(int **grade,int pupils,int tests),此時不可以把一個定義為int sag[3][4]的數組直接傳過去,使用這個函數編譯則會出現error C2664: ‘maximun‘ : cannot convert parameter 1 from ‘int [3][4]‘ to ‘int ** ‘ 出現這個問題可以修改為int maximun(int (*grade)[4],int pupils,int tests)
C++學習一