我正在尝试使用指针指针打印存储在2D数组中的乘法表。当我运行此代码时,它只打印出“1s”列。如果我删除外循环的增量和换行条件,那么它将打印数字1-10十次。我不明白这种行为。
printf("\n");
printf("Multiplication Table in standard array syntax\n");
int a[10][10];
int j;
int k;
int prod;
for (j = 1; j < 11; j++){
for (k = 1; k < 11; k++){
prod = j*k;
a[j - 1][k - 1] = prod;
printf("%d ", a[j - 1][k - 1]);
if (k == 10)
printf("\n");
}
}
printf("\n");
printf("Multiplication Table in standard + pointer syntax\n");
int *pi[10];
int x;
for (x = 0; x <10; x++){
pi[x] = a[x];
}
int y;
for (x = 0; x < 10; x++){
for (y = 0; y < 10; y++){
printf("%d ", *(pi[x] + y));
if (y == 9)
printf("\n");
}
}
printf("\n");
printf("Multpilication Table in pure pointer syntax\n");
int **ppi;
ppi = pi;
int p;
int q;
for (p = 0; p < 10; p++){
for (q = 0; q < 10; q++){
printf("%d", *(*ppi + q));
if (q = 9)
printf("\n");
}
ppi++;
}
}
答案 0 :(得分:2)
唯一的拼写错误是if (q = 9)
将其更改为if (q == 9)
,因为这会终止您的循环
答案 1 :(得分:1)
前两个块工作正常,在第三个块中你有q = 9
而不是q == 9
(如gregkow所说)。 if子句有一种编码风格(称为Yoda Conditions),其首先具有值:
if( 9 == q )
这会在这样的拼写错误中失败:
if( 9 = q )
main.c: In function 'main':
main.c:51:15: error: lvalue required as left operand of assignment
if (9 = q)
^
答案 2 :(得分:0)
我怀疑是if (q = 9)
行。 C对此没有问题(它将q
设置为9,然后检查是否为非零)。这可能会提前结束你的for循环并打印新行。