1、錯誤: double d=2/128; //d将等于0.0;
正确: doubled=2.0/128.0; //d将等于2除以128所得的實數;
2、錯誤:for(int i=0;i<10;i++) ....
正确:int i;
for(i=0;i<10;i++) ....
注:在C++中允許在for語句中定義變量,但在C語言中是不允許的。
3、錯誤:char* dir;
scanf("%s",dir);//這樣操作的結果為dir=null。
正确:chardir[50];
scanf("%s",dir);//這樣操作的結果為dir=輸入的字元串。
注:未初始化的指針為null;要用數組來存字元串,而不是指針來存字元串,是以若指針不是指向字元數組的,那麼用它來存讀入的字元串将會産生錯誤的結果(編譯時不會報錯)。
4、意圖:将字元串dir="output"連結到一個空字元串上。
錯誤:char str[50]
strcat(str,dir);//容易産生未知錯誤(也有可能不發生錯誤),str應該初始化為空字元串。
正确:charstr[50]={};//将str初始化成空字元串
strcat(str,dir);//相當于把dir複制到了str,即dir作為str的開頭,str後面還可以連接配接其他的字元串
注:要重視初始化的作用;字元串初始化成空用str={};
5、數組a(int a[5];)作為函數f的參數時,看下面幾種函數f定義時的情況:
錯誤: f(int[] a);
錯誤: f(int[5]a);
正确: f(inta[]); a相當于整型指針,sizeof(a)=8.
正确: f(inta[5]); a相當于整型指針,sizeof(a)=8.
正确: typedef intlosertree[5]; f(losertree a); a相當于整型指針,sizeof(a)=8.對應這種
情況,在f中改變a數組中的元素值,退出函數f後,a數組中的值真的改變了。
6、數組隻有在定義時初始化才可以使用{}對其指派,在定義語句後面另加一條語句對用{}對數組初始化是不對的;用{}對數組初始化時,{}内的值可以是變量,不必都是常量。
錯誤:int a[5];
a={1,2,3,4,5}; //隻有在定義時初始化才可以用{}對數組指派。
正确:inta[5]={1,2,3,4,5};
正确: int i,j,k,m,n;
int a[5]={i,j,k,m,n}; //{}内可以是變量
7、用二維數組當作參數時,如int a[2][2];
錯誤:voidtest(int array[][]){} //不能兩個次元都不指定
正确:voidtest(int array[][2]){} //可以不指定最高維的次元,但是其餘的次元都要制定
錯誤:void test(int** array){}test(a); //其實a隻是二維數組的第一個數的位址,而不是位址的位址,是以會提示類型不比對。
同理可以推理,假如用多元數組作為參數的時候,函數定義的時候,隻有多元數組的最高維可以不指定(也可以指定),其餘維必須指定。
8、關于優先級
關系操作符(<、>)的優先級比指派運算符(=)的優先級高。
int test=1>2;
以上語句的執行結果,test是0(代表1>2錯誤),而不是1.
9、C語言中在數組定義時不能使用這種形式:
int[10] a;
int[]這種形式隻能在寫函數的參數中使用。
10、
const char *const * pp
實質上是定義了一個指向字元串的二級指針,藍色的const 限制一級指針指向的内容不能修改,紅色的const限制二級指針指向的内容不能修改。
11、C/C++中,++、--操作符的優先級比解引用操作符*的優先級高。例子如下:
int a[5]={1,5,9,14,43};
int* ap=a;
cout<<*ap;
*ap++;
cout<<"and"<<*ap<<endl;
以上代碼片段輸出結果是:1and5,即是對指針先進行++操作,在解引用指針的值,而不是對解引用的值進行++操作。
12、關于字元串常量和字元數組 相同内容的字元串常量,在程式中隻有一份,即指向它們的不同名稱的指針是相等。如下例:
char* str="abc";
char* str1="abc";
if(str==str1)
cout<<true<<endl;
else
cout<<false<<endl;
以上代碼片段的輸出結果為:1。
而相同内容的不同的字元數組,在程式中有兩份存儲區域,隻不過他們内容相同。如下例:
const char str[]="abc";
const char str1[]="abc";
if(str==str1)
cout<<true<<endl;
else
cout<<false<<endl;
以上代碼片段輸出結果為:0。