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

Can't print values of a 2d matrix using pointers

本文关键字:2D 打印 指针      更新时间:2023-10-16

我在使用指针时遇到了一些麻烦。我试图填补这个二维矩阵,但我不能打印他们的值。你能看一看给我提示吗?

#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");
}

谢谢。

当你用

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

您的mat1int**类型。

因此你必须改变函数的调用方式:

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);

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");
}

尝试将打印语句更改为:

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);

你可以这样创建你的write函数:

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);

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

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

都是等价的....所以现在我相信你可以找出问题是什么:-)