我正在嘗試使用 for 回圈來獲取兩行的差異。總共有四行,因此減法和求和后的結果將只是 3 個數字。但是回圈提供了不合理的額外結果!!有誰知道為什么會這樣?
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int v[4][3] = {
{1,2,3},
{3,4,5},
{6,7,8},
{9,10,11} };
cout << sizeof(v) << "\n";
float sq = 0;
for(int i = 0; i < 3; i){
for(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]);
cout << "diff " << sq << endl;
}
}
cout << "final square of the numbers: " << sq << endl;
return 0;
}
``
uj5u.com熱心網友回復:
訪問v第一個索引中的 4 或過去 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都是非法的,因為它們超出了第一維或第二維或兩者中的陣列邊界。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/348100.html
