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

When you create a 2D array with

int mat1[L1][L2];

Your mat1 is of type int**.

You must therefore change the way your function is called:

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

and call it with

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

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);
于 2013-03-07T03:17:49.953 に答える
1

ポインターと配列について重要な側面が 1 つあります。

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

どちらも同等です....だから今、問題が何であるかを理解できると思います:-)

于 2013-03-07T04:01:05.287 に答える
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 に答える