Когда я поместил номер в flag[1][2]
, я автоматически поместил бы тот же номер в flag[2][0]
.Ошибка при настройке и получении значений из моего двумерного массива
Почему?
#include <iostream>
using namespace std;
void inicializarFlag(void);
void imrpimeflag(void);
int flag[2][2];
int main(){
int i, j, escolha;
inicializarFlag();
cout<<"digite as posicoes e o valor: "<<endl;
cin>>i;
cin>>j;
cin>>escolha;
flag[i][j] = escolha;
imrpimeflag();
return 0;
}
void inicializarFlag(void){
for (int i=0; i<=2; i++){
for(int j=0; j<=2; j++){
flag[i][j] = 0;
}
}
}
void imrpimeflag(void){
for (int i=0; i<=2; i++){
for(int j=0; j<=2; j++){
cout<<"["<<i<<"]["<<j<<"]: "<<flag[i][j]<<endl;
}
}
}
Привет, я внес изменения, которые вы сказали, но когда я поместил значение во флагов [2] [0], он теперь будет помещать то же значение во флаг [1] [3], что ther объявлен int flag [3] [3], вот отпечаток для результата ... http://imageshack.com/a/img633/5035/H7kYfp.jpg –
Правильно - это потому, что если вы объявите 'int flag [3] [3 ] 'тогда есть три строки и три столбца, пронумерованные 0, 1 и 2 для строк и столбцов. В этом случае «флаг [1] [3]» находится за пределами границ, потому что 3 метки не третий, а четвертый столбец 2D-массива (при индексировании массивов начиная с 0). Когда вы объявляете массив с 'int flag [3] [3]', это означает, что вы объявляете массив размером 3x3, но вы не можете использовать номер 3 для доступа к любым элементам массива, потому что 3 знака 4-го столбец при попытке доступа к элементам - и вы не объявили этот 4-й столбец. – cooperl1
Просто для правильности сделанное мной утверждение: «Когда вы объявляете массив с флагом int [3] [3], это означает, что вы объявляете массив размером 3x3», не совсем верно. Но он служит своей цели для размышления об этой проблеме. – cooperl1