【发布时间】:2018-01-20 17:05:12
【问题描述】:
1.这是使用指针添加两个矩阵的程序的一部分。
2.我收到错误error : invalid type argument of unary '*' (have 'int')。
3.这里A和B是初始化的二维数组,c1、r1不是。矩阵A和c2、r2的列和行分别为否。矩阵B的列和行。
main() {
int i, j, A[10][10], B[10][10], r1, r2, c1, c2;
//Inputting Matrix A
printf("\nFOR SET A ");
printf("\n\nEnter number of rows : ");
scanf("%d", &r1);
printf("\n\nEnter Number of Columns :");
scanf("%d", &c1);
printf("\n\nEnter Elements of matrix A :\n\n");
for (i = 0; i < r1; i++) {
for (j = 0; j < c1; j++) {
scanf("%d", (*(A + i) + j));
}
}
//Inputting Matrix A
printf("\n\nFOR SET B:");
printf("\n\nEnter number of rows : ");
scanf("%d", &r2);
printf("\n\nEnter Number of Columns :");
scanf("%d", &c2);
printf("\n\nEnter Elements of matrix B :\n\n");
for (i = 0; i < r2; i++) {
for (j = 0; j < c2; j++) {
scanf(" %d", (*(B + i) + j));
}
}
//Displaying matrix A
printf("\n\nMatrix A is :\n\n");
for (i = 0; i < r1; i++) {
for (j = 0; j < c1; j++) {
printf(" %d ", *(*(A + i) + j));
}
printf("\n\n");
}
//Displaying matrix B
printf("\n\nMatrix B is :\n\n");
for (i = 0; i < r2; i++) {
for (j = 0; j < c2; j++) {
printf(" %d ", *(*(B + i) + j));
}
printf("\n\n");
}
//Calling the Addition function
add(A, r1, c1, B, r2, c2);
}
void add(int **A, int r1, int c1, int **B, int r2, int c2) {
if (r1 == r2 && c1 == c2) {
int i, j;
printf("\n\nThe Addition of matrix A and B is :\n\n");
for (i = 0; i < r1; i++) {
for (j = 0; j < c1; j++) {
printf(" %d ", ((*(*(A + i) + j)) + (*(*(B + i) + j))));
}
printf("\n\n");
}
} else
printf("\n\nMatrices are not of same order !!!");
}
【问题讨论】:
-
问问自己
*(A+i)的类型是什么。数组语法更易于阅读,请改用它。 -
看起来你取消引用了这么多,以至于你试图取消引用一个 int 为什么你不使用 A[i][j] 这也算作取消引用,否则这看起来很混乱我的建议,但你可以保持你的风格
-
我的大学作业要使用指针进行加法。