寫這篇文章的主要目的就是為了記錄下來平常我們用數(shù)組的時候不是很注意的問題?。?!
1 2 3 4 5 6 7 8 | #include <iostream> using namespace std; int main() { int b[10]; b[10]=3; cout<< "b[10]=" <<b[10]<<endl; } |
上面這個程序會輸出b[10]=3;但是只要我們細(xì)心就可以發(fā)現(xiàn),b[10]其實只包括了從b[0]~b[9]。那么這里的b[10]不就是越界了嘛?。?!這個錯誤會讓緊接著b這個數(shù)組之后的內(nèi)存被強(qiáng)行賦值為3!這當(dāng)然是應(yīng)該避免的了。但是由于標(biāo)準(zhǔn)的C++代碼不限制下標(biāo)越界,雖然這樣做可以使代碼的運(yùn)行速度加快,效率提高,但是這會很容易地修改其他變量的值,而且不容易發(fā)現(xiàn)。解決辦法只有一個:我們應(yīng)該經(jīng)常留意數(shù)組的下標(biāo)值是否在合理的范圍之內(nèi)。
p.s. 由于本人用的是vs2008,貌似它會在運(yùn)行的時候報錯,如下圖:
//方法1:簡要數(shù)組聲明 void func( int a[]) { //函數(shù)體 } //方法2:標(biāo)準(zhǔn)數(shù)組聲明 void func( int a[10]) { //函數(shù)體 } //方法3:指針聲明 void func( int *a) { //函數(shù)體 } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /************************************************************************/ /* 求100~199之和的平均值 */ /***********************************************************************/ #include<iostream> float Average( const float *, int ); //函數(shù)原型 int main() { float a[100],average,num=100; //num是第1個數(shù)的值,average是平均值 int i,total=100; //total是參加運(yùn)算的元素總數(shù) for (i=0;i<100;++i) //給數(shù)組a賦值 { a[i]=num; //將num的值賦給數(shù)組的第i個元素 num++; //由于100-199是依次加1,因此num++ } //調(diào)用函數(shù)x,傳遞的第1個參數(shù)a便是數(shù)組名a average= Average(a,total); //調(diào)用函數(shù),執(zhí)行傳參,然后在函數(shù)結(jié)束后返回一個平均值 std::cout<< "100-199的平均值為" <<average<<std::endl; return 0; } float Average( const float *a, int total) //向函數(shù)Average()中傳遞數(shù)組名,也就是數(shù)組a第1個元素的內(nèi)存地址 //函數(shù)定義里聲明了一個指針接收方式,接收到一個數(shù)組名,也就是第1個元素的內(nèi)存地址, //并使用自定義的指針a訪問數(shù)組a的內(nèi)存,進(jìn)行賦值操作 { int i; float sum=0.0,b; for (i=0;i<total;++i) { sum=sum+a[i]; } b=sum/total; return b; } |
area *one= new area[1000]; |
delete []one; |