为什么循环超过一个点会给C++带来不合理的结果?

我尝试使用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的访问都是非法的,因为它们在第一维度或第二维度或两者中都超过了数组边界

发表评论