数组中的值被改变但他们不应该
Values in array getting altered yet they shouldn't
这是一个程序,要求用户输入两个 3 x 3 矩阵的值,然后求出两个矩阵的总和,并打印出与相加矩阵相同的值,但由于某种原因,在输入两个矩阵的值后矩阵中的 a 值被改变然后它影响总和但有时它不会
#include<stdio.h>
void main(){
int matrix1[2][2];
int matrix2[2][2];
int sumMatrix[2][2];
for(int i = 0; i<3; i++){
for(int j = 0; j<3; j++){
printf("Matrix[%d][%d]\n", i, j);
printf("Enter matrix one's values> ");
scanf("%d", &matrix1[i][j]);
}
printf("\n");
}
for(int i = 0; i<3; i++){
for(int j = 0; j<3; j++){
printf("Matrix[%d][%d]\n", i, j);
printf("Enter matrix two's values> ");
scanf("%d", &matrix2[i][j]);
}
printf("\n");
}
for(int i = 0; i<3; i++){
for(int j = 0; j<3; j++){
sumMatrix[i][j] = matrix1[i][j] + matrix2[i][j];
}
}
for(int i = 0; i<3; i++){
for(int j = 0; j<3; j++){
printf("%d ", matrix1[i][j]);
}
printf("\n");}
printf("\n");
for(int i = 0; i<3; i++){
for(int j = 0; j<3; j++){
printf("%d ", matrix2[i][j]);
}
printf("\n");}
printf("\n");
for(int i = 0; i<3; i++){
for(int j = 0; j<3; j++){
printf("%d ", sumMatrix[i][j]);
}
printf("\n");
}
}
您正在声明大小为 2x2 的矩阵并像访问 3x3 一样访问它们。更准确地说是缓冲区溢出,你在不该写的地方写了,这样你就覆盖了其他变量。
好吧,很明显我是个白痴。我认为数组大小是根据它们将拥有的索引数设置的,所以应该是 int matrix [3][3]
而不是 int matrix1[2][2]
小伙子,那就是数组溢出。
int matrix1[2][2];
但是在循环中,你可能会得到矩阵 1[2][1],矩阵 1[2][2].
这是一个程序,要求用户输入两个 3 x 3 矩阵的值,然后求出两个矩阵的总和,并打印出与相加矩阵相同的值,但由于某种原因,在输入两个矩阵的值后矩阵中的 a 值被改变然后它影响总和但有时它不会
#include<stdio.h>
void main(){
int matrix1[2][2];
int matrix2[2][2];
int sumMatrix[2][2];
for(int i = 0; i<3; i++){
for(int j = 0; j<3; j++){
printf("Matrix[%d][%d]\n", i, j);
printf("Enter matrix one's values> ");
scanf("%d", &matrix1[i][j]);
}
printf("\n");
}
for(int i = 0; i<3; i++){
for(int j = 0; j<3; j++){
printf("Matrix[%d][%d]\n", i, j);
printf("Enter matrix two's values> ");
scanf("%d", &matrix2[i][j]);
}
printf("\n");
}
for(int i = 0; i<3; i++){
for(int j = 0; j<3; j++){
sumMatrix[i][j] = matrix1[i][j] + matrix2[i][j];
}
}
for(int i = 0; i<3; i++){
for(int j = 0; j<3; j++){
printf("%d ", matrix1[i][j]);
}
printf("\n");}
printf("\n");
for(int i = 0; i<3; i++){
for(int j = 0; j<3; j++){
printf("%d ", matrix2[i][j]);
}
printf("\n");}
printf("\n");
for(int i = 0; i<3; i++){
for(int j = 0; j<3; j++){
printf("%d ", sumMatrix[i][j]);
}
printf("\n");
}
}
您正在声明大小为 2x2 的矩阵并像访问 3x3 一样访问它们。更准确地说是缓冲区溢出,你在不该写的地方写了,这样你就覆盖了其他变量。
好吧,很明显我是个白痴。我认为数组大小是根据它们将拥有的索引数设置的,所以应该是 int matrix [3][3]
int matrix1[2][2]
小伙子,那就是数组溢出。
int matrix1[2][2];
但是在循环中,你可能会得到矩阵 1[2][1],矩阵 1[2][2].