无法使用指针打印2d矩阵的值

时间:2013-03-07 03:13:47

标签: c++ arrays pointers 2d

我在使用指针时遇到了一些麻烦。我试图填写这个2D矩阵,但我不能打印他们的价值..你能看看并给我一个提示。

#include <stdio.h>
#include <stdlib.h>

#define L1  3
#define C1  2

#define L2  4
#define C2  3

void write(int *p, int n_lin, int n_col){

int i,j;


    for(i=0;i<n_lin;i++){
        for(j=0;j<n_col;j++){
            printf("%d",*p[i][j]);  // <- Can't make it work :(
        }
        printf("\n");
    }
}
void main(){


int *p=NULL;
int mat1[L1][C1] = {{1,2}, {3,4}, {5,6}};

int mat2[L2][C2] = {{1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}};

printf("Matriz 1:\n");
write(*mat1, L1, C1);

printf("\nMatriz 2:\n");
write(*mat2, L2, C2);

system("pause");
}

感谢。

5 个答案:

答案 0 :(得分:2)

使用

创建2D数组时
int mat1[L1][L2];

您的mat1类型为int**

因此,您必须更改调用函数的方式:

void write(int **p, int n_lin, int n_col){ // <- changed this
int i,j;
    for(i=0;i<n_lin;i++){
        for(j=0;j<n_col;j++){
            printf("%d",p[i][j]);  // <- Changed this! :)
        }
        printf("\n");
    }
}

并用

调用它
write(mat1, L1, C1);

答案 1 :(得分:1)

你的for循环应该是:

for(i=0;i<n_lin;i++){
    for(j=0;j<n_col;j++){
        printf("%d",p[i][j]);  // *p[i][j] should be p[i][j]
    }
    printf("\n");
}

答案 2 :(得分:1)

尝试将print语句更改为:

printf("%d",*( p + i*n_lin + j));

除此之外,还有一些问题。


在功能定义中,尝试使用

void write(int p[][], int n_lin, int n_col){

然后使用,

printf("%d",p[i][j]));

用它调用,

write(mat1, L1, C1);

答案 3 :(得分:1)

你可以像这样创建你的写函数:

template <int n_lin,int n_col>
void write(const int (&p)[n_lin][n_col])
{

    int i,j;

    for(i=0;i<n_lin;i++) {
        for(j=0;j<n_col;j++) {
            printf("%d ",p[i][j]);
        }
        printf("\n");
    }
}

然后只需致电

write(mat1);
write(mat2);

答案 4 :(得分:1)

指针和数组有一个重要方面: -

One dimension  ---     a[i]  = *(a+i)
Two dimension  ---     a[i][j] = *(*(a+i)+j)   and so on... 

两者都是等价的....所以现在我相信你可以弄清楚问题是什么: - )