我尝试使用for循环来获取两行的差异。总共有四行,所以减法和求和后的结果将是3个数字。但是循环提供了额外的结果,这是不合理的!!有人知道为什么会这样吗
\include<;iostream>;
#包括<;向量>;
使用名称空间std;
int main()
{
int v[4][3]={
{1,2,3},
{3,4,5},
{6,7,8},
{9,10,11} };
(v)"cout"sizeof(v)";;
浮动平方=0;
对于(int i=0;i<;3;++i){
对于(int j=0;j<;2;++j){
sq+=(v[i+1][j]-v[i][j])+(v[i+1][j+1]-v[i][j+1])+(v[i+1][j+2]-v[i][j+2]);
不能“区分”sq<;endl;
}
}
数字的最后一个平方:“sq”和“endl”;
返回0;
}
``
访问v
在或超过第一个索引中的4或第二个索引中的3是未定义的行为
如果你幸运的话,你会胡说八道。如果幸运的话,您的程序在测试时会崩溃。如果您运气不好,程序会在其权限内执行任意操作
在您的情况下,最多可以访问v[4][5]
一个执行未定义行为的编程没有用C++语言来约束它。
当i=3,j=3时,我们得到:
sq+=(v[4][3]-v[3][3])+(v[4][4]-v[3][4])+(v[4][5]-v[3][5]);
所有这些对v
的访问都是非法的,因为它们在第一维度或第二维度或两者中都超过了数组边界