首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

大神们,帮帮忙解决办法

2013-12-30 
大神们,帮帮忙本帖最后由 BikeyTang 于 2013-12-22 13:01:49 编辑#include iostream.htemplate class T

大神们,帮帮忙
本帖最后由 BikeyTang 于 2013-12-22 13:01:49 编辑

#include <iostream.h>
template <class Type> Type sum(Type* array,int size){
Type total=0;
for(int i=0;i<size;i++)
{
total+=*(array+i);
}
cout<<"The first:";
return total;
}
template <class Type> Type sum(Type* a1,Type* a2,int size){
Type total=0;
for(int i=0;i<size;i++)
{
total+=a1[i]+a2[i];
}
cout<<"The second:";
return total;
}
void main(){
int a1[10],a2[8];
float af[10];
for(int i=0;i<10;i++){
a1[i]=i;
a2[i]=i;
af[i]=i;
}
cout<<sum(a1,10)<<endl;
cout<<sum(af,10)<<endl;
cout<<sum(a1,a2,8)<<endl;
}

!为什么a2在赋值是不会发生溢出?还有就是a1和af数组内值相加和不同?求大神指导啊
[解决办法]
for(int i=0;i<10;i++)
a2[声明只有8个元素 你往里面装了10个 没有a[8],a[9],
[解决办法]
引用:
Quote: 引用:

哦 还有第二问  a1和af数组内值相加和 有什么不同吗?

运行出的结果不同

cout<<sum(a1,10)<<endl;
 cout<<sum(af,10)<<endl;
----------------------
不都是45吗?
[解决办法]
引用:
我也纳闷啊

Quote: 引用:

for(int i=0;i<10;i++)
a2[声明只有8个元素 你往里面装了10个 没有a[8],a[9],

为什么赋值不会发生错误呢

为什么编译器一定会报错呢?只要访问的还是有效空间一般都是没问题的,因为C/C++的编译器一般不会主动对数组的下标做边界检查。

一般溢出后都会覆盖掉其他变量的值,你检查看看a1、af看看有没有被覆盖,单步看看。也可能覆盖了其他无效的地址,总之报不报错很难说。
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

我也纳闷啊

Quote: 引用:

for(int i=0;i<10;i++)
a2[声明只有8个元素 你往里面装了10个 没有a[8],a[9],

为什么赋值不会发生错误呢

为什么编译器一定会报错呢?只要访问的还是有效空间一般都是没问题的,因为C/C++的编译器一般不会主动对数组的下标做边界检查。

一般溢出后都会覆盖掉其他变量的值,你检查看看a1、af看看有没有被覆盖,单步看看。也可能覆盖了其他无效的地址,总之报不报错很难说。
你这解释的有道理,但覆盖为什么是把a1的a1[0]和a1[1]给覆盖,而不是覆盖a2本身的??

函数中的变量是压栈的,即先声明的变量地址比后声明的大(先入栈),因此a2超出范围的部分覆盖了a1的变量值,即8、9覆盖了0,1
[解决办法]
不懂帮顶,顺便拿可用分十分~~

热点排行