使用指向指向数组的指针的指针打印2D数组

时间:2014-02-14 17:28:52

标签: c arrays pointers

我正在尝试使用指针指针打印存储在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++;
}

}

3 个答案:

答案 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循环并打印新行。