如何使用指针在C中打印矩阵?

时间:2017-01-17 16:38:11

标签: c pointers matrix

我无法弄清楚为什么程序的输出如此奇怪。我只是想用指针打印矩阵,但我得到的是:

1 7 3 8 9
10 8 9 3 4

1 7 3 8 9
7 3 8 9 10

我在这里做错了什么?

#include<stdio.h>
#define NK 5
#define NW 2
int sum(int *w);
int main(void) {

    srand(time(NULL));
    int T[NW][NK];
    int i, j;
    for (i = 0; i<NW; i++) {
        for (j = 0; j<NK; j++) {
            T[i][j] = rand() % 10 + 1;
            printf("%d ", T[i][j]);
        }
        printf("\n");
    }
    int *wsk = T;

    printf("\n");
    sum(wsk);

    return 0;
}
int sum(int *w) {
    int i, j;
    int suma = 0;
    printf("\n");
    for (i = 0; i<NW; i++) {
        for (j = 0; j<NK; j++) {
            printf("%d ", *((w + i)+j));
        }
        printf("\n");
    }

}

1 个答案:

答案 0 :(得分:2)

如果几何图形是固定的,您只需使用正确的类型声明参数:

int sum(int w[NW][NK]) {
    printf("\n");
    for (int i = 0; i < NW; i++) {
        for (int j = 0; j < NK; j++) {
            printf("%d ", w[i][j]);
        }
        printf("\n");
    }
}

如果您坚持将指针传递给线性化版本:

int sum(int *w) {
    printf("\n");
    for (int i = 0; i < NW; i++) {
        for (int j = 0; j < NK; j++) {
            printf("%d ", w[i * NK + j]);
        }
        printf("\n");
    }
}