写这篇文章的主要目的就是为了记录下来平常我们用数组的时候不是很注意的问题!!!
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;但是只要我们细心就可以发现,b[10]其实只包括了从b[0]~b[9]。那么这里的b[10]不就是越界了嘛!!!这个错误会让紧接着b这个数组之后的内存被强行赋值为3!这当然是应该避免的了。但是由于标准的C++代码不限制下标越界,虽然这样做可以使代码的运行速度加快,效率提高,但是这会很容易地修改其他变量的值,而且不容易发现。解决办法只有一个:我们应该经常留意数组的下标值是否在合理的范围之内。
p.s. 由于本人用的是vs2008,貌似它会在运行的时候报错,如下图:
//方法1:简要数组声明 void func( int a[]) { //函数体 } //方法2:标准数组声明 void func( int a[10]) { //函数体 } //方法3:指针声明 void func( int *a) { //函数体 } |
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 ); //函数原型 int main() { float a[100],average,num=100; //num是第1个数的值,average是平均值 int i,total=100; //total是参加运算的元素总数 for (i=0;i<100;++i) //给数组a赋值 { a[i]=num; //将num的值赋给数组的第i个元素 num++; //由于100-199是依次加1,因此num++ } //调用函数x,传递的第1个参数a便是数组名a average= Average(a,total); //调用函数,执行传参,然后在函数结束后返回一个平均值 std::cout<< "100-199的平均值为" <<average<<std::endl; return 0; } float Average( const float *a, int total) //向函数Average()中传递数组名,也就是数组a第1个元素的内存地址 //函数定义里声明了一个指针接收方式,接收到一个数组名,也就是第1个元素的内存地址, //并使用自定义的指针a访问数组a的内存,进行赋值操作 { 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; |
联系客服