【发布时间】:2017-05-04 20:57:30
【问题描述】:
我在使用 scanf 输入矩阵时玩弄指针,出于某种原因,当我运行此代码时,只有每行的第一个元素被正确存储。
#include "stdio.h"
void main()
{
int i, j, n, A[10][10];
scanf("%d", &n);
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
scanf("%d", A + j + i*10);
}
这是我将 1,2,3,4,5,6,7,9 输入 3x3 矩阵并打印后得到的结果:
1 -858993460 -858993460
2 -858993460 -858993460
3 -858993460 -858993460
根据我对矩阵存储方式的理解,这应该可以。谁能指出我的代码有什么问题?
【问题讨论】:
-
A + j + i*10是错误的。改成喜欢(int*)A + j + i*10 -
或
A + j + i*10-->*(A + i) + j -
所以我需要将其转换为指针?为什么在将这个原理用于一维数组时我不必这样做?它只适用于 A + i 或其他东西。
-
因为
A作为表达式求值时的类型是int (*)[10],而不是int* -
错误的指针数学。
scanf("%d", A + j + i*10);-->scanf("%d", &A[i][j]);
标签: c pointers memory matrix scanf