0

我在使用指针时遇到了一些麻烦。我试图填充这个 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");
}

谢谢。

4

5 回答 5

2

当您创建一个二维数组时

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);
于 2013-03-07T03:19:39.827 回答
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");
}
于 2013-03-07T03:16:24.567 回答
1

尝试将打印语句更改为:

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);
于 2013-03-07T03:17:49.953 回答
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);
于 2013-03-07T03:58:58.813 回答
1

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

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

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

于 2013-03-07T04:01:05.287 回答